使用 BeautifulSoup 通过超链接访问表格数据
Posted
技术标签:
【中文标题】使用 BeautifulSoup 通过超链接访问表格数据【英文标题】:Accessing tabular data via hyperlinks with 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 脚本来做到这一点?我应该使用蜘蛛吗?
【问题讨论】:
【参考方案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 循环,并确保您没有跳过任何内容。 (我可能错了!)以上是关于使用 BeautifulSoup 通过超链接访问表格数据的主要内容,如果未能解决你的问题,请参考以下文章