如何使用python抓取多页面网站并将数据导出到.csv文件中?

时间:2016-07-24 14:48:41

标签: python csv beautifulsoup

我想使用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)

1 个答案:

答案 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"