网页内容与网页的源代码不匹配

时间:2015-05-22 04:29:06

标签: html web web-scraping beautifulsoup

我使用BeautifulSoup几周来一直在玩网页抓页。我最近遇到的一个问题是,之前没见过的是网页的内容与页面的源代码和网址中的内容不同之处请求回复。

例如,让我们看看yelp。这个(http://www.yelp.com/search?find_desc=&find_loc=Pittsburgh%2C+PA%2C+USA&ns=1)将带来宾夕法尼亚州匹兹堡地区的所有63,000家企业。如果我们查看页面源代码,我们会看到它与内容匹配(如果您搜索显示这个词,它会在下面找到代码。)

<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,生成了包含63,000个商家的页面,而不是我期待的5k餐厅。

我的问题是造成这种情况的原因是什么?这是由Yelp整体完成还是由外部原因造成的?我已经尝试过自己查看这个内容,但是我无法使用此问题标题中的措辞来找到解释此内容的任何内容。

如果您需要更多详细信息,请与我们联系。我很乐意提供我遗漏的更多代码。

谢谢!

1 个答案:

答案 0 :(得分:3)

Yelp与许多响应式网站一样,使用AJAX获取更多数据和/或jQuery来执行过滤。在执行任何jQuery或AJAX更新之前,Scraping只能提取基本HTML。

这两个网址很可能与服务器端代码相同:

  

搜索find_desc =安培; find_loc =匹兹堡%2C + PA%2C +美国及其NS = 1
  搜索find_desc =安培; find_loc =匹兹堡%2C + PA%2C +美国及其NS = 1#CFLT =餐馆

这就是为什么你在两种情况下看到相同的刮擦结果。但是,片段#cflt=restaurants由客户端JavaScript使用,并启动一些脚本来过滤结果。