【发布时间】:2015-05-22 04:29:06
【问题描述】:
几周以来,我一直在使用 BeautifulSoup 抓取网页。我最近遇到的一个问题是网页的内容与页面源代码显示的内容以及 url 请求响应中给出的内容不同。
例如,让我们看看 yelp。这 (http://www.yelp.com/search?find_desc=&find_loc=Pittsburgh%2C+PA%2C+USA&ns=1) 将带动宾夕法尼亚州匹兹堡地区的所有 63,000 家企业。如果我们查看页面源代码,我们会看到它与内容匹配(如果您搜索单词 showing,它会找到下面的代码。)
<span class="pagination-results-window">
Showing 1-10 of 63936
</span>
现在,让我们只看看宾夕法尼亚州匹兹堡地区的餐厅。这将返回结果的数量从 63k 减少到 5k。但是,如果我们查看页面源代码,则会看到上面显示的相同代码。而且,页面源中的第一个返回结果匹配的是63k页面,而不是5k页面。起初,我认为这可能是由于 mozilla 缓存网页内容,但很快通过抓取 5k 餐厅的链接 (http://www.yelp.com/search?find_desc=&find_loc=Pittsburgh%2C+PA%2C+USA&ns=1#cflt=restaurants) 否定了这个想法。结果表明,它收集的 html 生成了包含 63k 家商家的页面,而不是我预期的 5k 家餐馆。
我的问题是这是什么原因造成的?这是由 Yelp 故意完成的,还是由外部原因造成的?我尝试自己查找此内容,但我无法找到任何使用此问题标题中的措辞来解释此问题的内容。
如果您需要更多详细信息,请告诉我,我很乐意提供我遗漏的几行代码。
谢谢!
【问题讨论】:
-
Yelp 与许多响应式网站一样,使用 AJAX 获取更多数据。抓取只能在任何 AJAX 请求完成之前提取原始 HTML。看起来搜索过滤器是在页面加载后应用的。
标签: html web web-scraping beautifulsoup