我想使用python抓取以下网站,需要将抓取的数据导出到CSV文件中:
http://www.swisswine.ch/en/producer?search=&&
本网站包含154页相关搜索。我需要调用每个页面并想要抓取数据,但我的脚本不能连续调用下一页。它只刮一页数据。
这里我赋值i< 153因此这个脚本只运行第154页并给了我10个数据。我需要从第1页到第154页的数据
如何运行脚本以及如何将数据导出为CSV文件,如何从所有页面中抓取整个数据?
我的脚本如下
import csv
import requests
from bs4 import BeautifulSoup
i = 0
while i < 153:
url = ("http://www.swisswine.ch/en/producer?search=&&&page=" + str(i))
r = requests.get(url)
i=+1
r.content
soup = BeautifulSoup(r.content)
print (soup.prettify())
g_data = soup.find_all("ul", {"class": "contact-information"})
for item in g_data:
print(item.text)
答案 0 :(得分:1)
您也应该将HTML解析代码放在循环下的中。并且您没有正确递增i
变量(感谢@MattDMo):
import csv
import requests
from bs4 import BeautifulSoup
i = 0
while i < 153:
url = ("http://www.swisswine.ch/en/producer?search=&&&page=" + str(i))
r = requests.get(url)
i += 1
soup = BeautifulSoup(r.content)
print (soup.prettify())
g_data = soup.find_all("ul", {"class": "contact-information"})
for item in g_data:
print(item.text)
我还会改进以下内容:
使用requests.Session()
维护网络抓取会话,这也会带来性能提升:
如果您向同一主机发出多个请求,则会重用底层TCP连接,这会导致性能显着提升
明确指出BeautifulSoup
的基础解析器:
soup = BeautifulSoup(r.content, "html.parser") # or "lxml", or "html5lib"