从csv文件中的URL检索数据-Python

从csv文件中的URL检索数据-Python,python,csv,web-scraping,beautifulsoup,Python,Csv,Web Scraping,Beautifulsoup,如何修改此代码以使用csv中的url列表,转到这些页面,然后执行代码的最后一部分以检索正确的数据? 我觉得去csv存储链接并从中检索数据的代码部分有点不对劲,但我有一个csv,我的目标URL每行列出一个,而这段代码的最后一部分目标联系人详细信息等也正常工作 import requests import re from bs4 import BeautifulSoup import csv #Read csv csvfile = open("gymsfinal.csv") csvfilelist

如何修改此代码以使用csv中的url列表,转到这些页面,然后执行代码的最后一部分以检索正确的数据?

我觉得去csv存储链接并从中检索数据的代码部分有点不对劲,但我有一个csv,我的目标URL每行列出一个,而这段代码的最后一部分目标联系人详细信息等也正常工作

import requests
import re
from bs4 import BeautifulSoup
import csv

#Read csv
csvfile = open("gymsfinal.csv")
csvfilelist = csvfile.read()

#Get data from each url
def get_page_data():
    for page_data in csvfilelist:
        r = requests.get(page_data.strip())
        soup = BeautifulSoup(r.text, 'html.parser')
        return soup

pages = get_page_data()
'''print pages'''

#The work performed on scraped data
print soup.find("span",{"class":"wlt_shortcode_TITLE"}).text
print soup.find("span",{"class":"wlt_shortcode_map_location"}).text
print soup.find("span",{"class":"wlt_shortcode_phoneNum"}).text
print soup.find("span",{"class":"wlt_shortcode_EMAIL"}).text

th = soup.find('b',text="Category")
td = th.findNext()
for link in td.findAll('a',href=True):
    match = re.search(r'http://(\w+).(\w+).(\w+)', link.text)
    if match:
        print link.text

gyms = [name,address,phoneNum,email]
gym_data_list.append(gyms)

#Saving specific listing data to csv
with open ("xgyms.csv", "wb") as file:
    writer = csv.writer(file)
    for row in gym_data_list:
        writer.writerow(row)
gymsfinal.csv的片段:

http://www.gym-directory.com/listing/green-apple-wellness-centre/
http://www.gym-directory.com/listing/train-247-fitness-prahran/
http://www.gym-directory.com/listing/body-club/
http://www.gym-directory.com/listing/training-glen/

更改为
writer.writerow([row])
以保存csv数据,每个字母之间不带逗号。

这里有几个问题。首先,您永远不会关闭第一个文件对象,这是一个很大的禁忌。您应该使用
语法,在代码段底部使用该语法来读取csv

您收到错误
requests.exceptions.MissingSchema:无效URL“h”:未提供架构。也许您的意思是http://h?
,因为当您在中读取csv时,您只是将其作为一个大字符串读取,并带有换行符。因此,当您使用csvfilelist:
中的page_数据的
对其进行迭代时,它将遍历字符串中的每个字符(字符串在Python中是可迭代的)。显然,这不是一个有效的url,因此请求会引发异常。当您读入文件时,它应该是这样的

with open('gymsfinal.csv') as f:
    reader = csv.reader(f)
    csvfilelist = [ row[0] for row in reader ]
您还应该更改从
get\u page\u data()
返回url的方式。目前,您只需返回第一份汤。为了让它返回所有汤的生成器,您只需将
return
更改为
yield


你的打印状态也会有问题。它们应该进入一个类似于
for soup in pages:
的for循环,或者应该进入
get_page_data()
的for循环。在这些打印的上下文中没有定义变量
soup

第9行应该是
r=requests.get(page_data.strip())
。这假设您的文件每行有一个url。如果它实际上是一个csv,最好使用.Post一段gymsfinal.csv请?对csv的编写方式进行了更改,但仍然得到以下信息:
requests.exceptions.MissingSchema:无效URL“h”:未提供架构。也许你的意思是http://h?