【问题标题】:Accessing tabular data via hyperlinks with BeautifulSoup使用 BeautifulSoup 通过超链接访问表格数据
【发布时间】:2016-01-13 04:00:46
【问题描述】:

关于使用 BeautifulSoup,我仍有一些不明白的地方。我可以用它来解析网页的原始 HTML,这里是“example_website.com”:

from bs4 import BeautifulSoup # load BeautifulSoup class
import requests 
r  = requests.get("http://example_website.com")
data = r.text
soup = BeautifulSoup(data)
# soup.find_all('a') grabs all elements with <a> tag for hyperlinks    

然后,要检索和打印所有具有 'href' 属性的元素,我们可以使用 for 循环:

for link in soup.find_all('a'):
    print(link.get('href')) 

我不明白的是:我有一个包含多个网页的网站,每个网页都列出了几个超链接,这些超链接指向一个带有表格数据的网页。

我可以使用 BeautifulSoup 来解析主页,但是如何使用相同的 Python 脚本来抓取第 2 页、第 3 页等呢?您如何“访问”通过“href”链接找到的内容?

有没有办法编写一个 python 脚本来做到这一点?我应该使用蜘蛛吗?

【问题讨论】:

    标签: python html parsing web-scraping beautifulsoup


    【解决方案1】:

    您当然可以使用requests+BeautifulSoup 做到这一点。这将具有阻塞性质,因为您将逐个处理提取的链接,并且在完成当前链接之前不会继续下一个链接。示例实现:

    from urlparse import urljoin
    
    from bs4 import BeautifulSoup 
    import requests 
    
    with requests.Session() as session:    
        r = session.get("http://example_website.com")
        data = r.text
        soup = BeautifulSoup(data)
    
        base_url = "http://example_website.com" 
        for link in soup.find_all('a'):
            url = urljoin(base_url, link.get('href'))
    
            r = session.get(url)
            # parse the subpage
    

    不过,它可能会很快变得复杂而缓慢。

    您可能需要切换到Scrapy web-scraping framework,这使得网络抓取、爬网、跟踪链接变得容易(使用链接提取器查看CrawlSpider)、快速且非阻塞性质(它基于 Twisted) .

    【讨论】:

    • "复杂而缓慢" 这就是问题所在。我想我必须一个一个地处理链接。对于“目录”类型的网站(例如,想想 Yelp),这会变得乏味。您将不得不编写多个 for 循环,并确保您没有跳过任何内容。 (我可能错了!)
    猜你喜欢
    • 2019-04-16
    • 2021-10-11
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2023-03-06
    • 2020-10-28
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多