python web抓取并将数据写入csv
Posted
技术标签:
【中文标题】python web抓取并将数据写入csv【英文标题】:python webscraping and write data into csv 【发布时间】:2017-02-10 02:11:19 【问题描述】:我正在尝试将所有数据(即所有页面)保存在单个 csv 文件中,但此代码仅保存最终页面数据。例如,此处 url[] 包含 2 个 url。最终的 csv 仅包含第二个 url 数据。 我显然在循环中做错了什么。但我不知道是什么。 此页面还包含 100 个数据点。但是这段代码只写了前 44 行。 请帮忙解决这个问题......
from bs4 import BeautifulSoup
import requests
import csv
url = ["http://sfbay.craigslist.org/search/sfc/npo","http://sfbay.craigslist.org/search/sfc/npo?s=100"]
for ur in url:
r = requests.get(ur)
soup = BeautifulSoup(r.content)
g_data = soup.find_all("a", "class": "hdrlnk")
gen_list=[]
for row in g_data:
try:
name = row.text
except:
name=''
try:
link = "http://sfbay.craigslist.org"+row.get("href")
except:
link=''
gen=[name,link]
gen_list.append(gen)
with open ('filename2.csv','wb') as file:
writer=csv.writer(file)
for row in gen_list:
writer.writerow(row)
【问题讨论】:
【参考方案1】:gen_list 正在您的循环中再次初始化,该循环通过 url 运行。
gen_list=[]
将此行移到 for 循环之外。
...
url = ["http://sfbay.craigslist.org/search/sfc/npo","http://sfbay.craigslist.org/search/sfc/npo?s=100"]
gen_list=[]
for ur in url:
...
【讨论】:
【参考方案2】:我后来找到了你的帖子,想试试这个方法:
import requests
from bs4 import BeautifulSoup
import csv
final_data = []
url = "https://sfbay.craigslist.org/search/sss"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "html.parser")
get_details = soup.find_all(class_="result-row")
for details in get_details:
getclass = details.find_all(class_="hdrlnk")
for link in getclass:
link1 = link.get("href")
sublist = []
sublist.append(link1)
final_data.append(sublist)
print(final_data)
filename = "sfbay.csv"
with open("./"+filename, "w") as csvfile:
csvfile = csv.writer(csvfile, delimiter = ",")
csvfile.writerow("")
for i in range(0, len(final_data)):
csvfile.writerow(final_data[i])
【讨论】:
以上是关于python web抓取并将数据写入csv的主要内容,如果未能解决你的问题,请参考以下文章
python网络爬虫抓取动态网页并将数据存入数据库MySQL