【问题标题】:how to scrape multipage website with python and export data into .csv file?如何使用 python 抓取多页网站并将数据导出到 .csv 文件中?
【发布时间】:2016-07-24 14:48:41
【问题描述】:

我想使用 python 抓取以下网站,需要将抓取的数据导出为 CSV 文件:

http://www.swisswine.ch/en/producer?search=&&

本网站包含 154 个相关搜索页面。我需要调用每一页并想抓取数据,但我的脚本无法连续调用下一页。它只抓取一页数据。

在这里我分配了 i

如何在运行脚本后从所有页面抓取整个数据以及如何将数据导出为 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)

【问题讨论】:

  • 抓取数据的行:从汤 = .... 下来,应该在循环内。否则,您将完成循环并仅获取循环后最后一个的数据。
  • @vishnu 使用 BeautifulSoup 很好。但是,如果您正在寻找要管理好的所有事情,则应该选择doc.scrapy.org/en/latest/intro/tutorial.html

标签: python csv beautifulsoup


【解决方案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"
    

【讨论】:

  • 您错过了一个小细节 - 在while 循环中,i 递增为i =+1。应该是i += 1。
  • @MattDMo 啊,我觉得这有点不对劲,但缺少早间咖啡。接得好!谢谢。
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多