【问题标题】:Parsing data stored in URLs via BeautifulSoup?通过 BeautifulSoup 解析存储在 URL 中的数据?
【发布时间】:2012-03-23 13:10:09
【问题描述】:

我正在尝试从该网站访问不同鱼类家族的 URL:http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Salmon

我希望能够运行一个脚本来打开给定网站的链接,然后能够解析页面中存储的信息。我对网络抓取相当陌生,因此将不胜感激。提前致谢!

这是我目前所拥有的:

import urllib2
import re
from bs4 import BeautifulSoup
import time

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Salmon'
page = urllib2.urlopen(fish_url)
html_doc = page.read()
soup = BeautifulSoup(html_doc)

page = urllib2.urlopen('http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Salmon').read()
soup = BeautifulSoup(page)
soup.prettify()
for fish in soup.findAll('a', href=True):
    print fish['href']

【问题讨论】:

    标签: python html web-scraping beautifulsoup


    【解决方案1】:

    Scrapy 是实现此目的的完美工具。它是一个 Python 网页抓取框架。 http://doc.scrapy.org/en/latest/intro/tutorial.html

    您可以将您的网址与您的术语一起传递,并创建抓取规则。

    例如,使用正则表达式,您可以添加一条规则来抓取路径为 /Summary 的所有链接,然后使用 XPath 或 Beautiful soup 提取信息。

    此外,您可以设置一个规则来自动处理分页,即在您的示例网址中,它可以自动跟随下一个链接。

    基本上,您尝试做的很多事情都是免费打包在 scrapy 中的。我会去看看它。

    【讨论】:

    • 是否有任何适用于 Python 3.x 的开源 Web Scraping 框架? Scrapy 仅适用于 2.7..
    • @Erik 查看 [BeautifulSoup](crummy.com/software/BeautifulSoup/)
    • 感谢 Steinar,我最终完全放弃了 Python。现在使用 CasperJS 和 PhantomJS。它的原生 DOM 树遍历确实加快了速度。
    【解决方案2】:

    如果您只是编写一次性脚本来获取该站点的所有数据,您可以执行以下操作:

    fish_url_base = "http://www.fishbase.org/ComNames/%s"
    fish_urls = [fish_url_base%a['href'] for a in soup.find_all('a')]
    

    这为您提供了要遍历的链接列表,您可以将其传递给urllib2.urlopenBeautifulSoup

    for url in fish_urls:
        fish_soup = BeautifulSoup(urllib2.urlopen(url).read())
        # Do something with your fish_soup
    

    (注 1:我尚未测试此代码;您可能需要调整基本 URL 以适应 href 属性,以便您访问正确的站点。)

    (注 2:我看到你使用 bs4,但在汤上调用 findAllfindAll 适合 BS3,但在 bs4 中改为 find_all。)

    (注意 3:如果您这样做是出于实用而非学习目的/乐趣,那么还有更有效的抓取方式,例如这里也提到了scrapy。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2015-06-09
      • 2014-04-03
      • 2019-05-19
      相关资源
      最近更新 更多