网络(使用Google Chrome查看来源)和网络抓取工具

时间:2017-08-11 15:25:24

标签: python web-scraping

我正在Zillow网站上进行网络抓取,我尝试了两个Python库来获取网络文本(使用请求和httplib2)。由于网络(使用谷歌浏览器查看来源)和网络抓取工具之间的文本来源不同,我遇到了不一致的待售案例数量

我的代码包括三个步骤。

  1. 通过邮政编码(如https://www.zillow.com/homes/for_sale/75001_rb/2_p/

  2. 访问案例
  3. 获取经度,纬度和zpid(例如/ homedetails / 3756-Park-Pl-Addison-TX-75001 / 26935870_zpid /)

  4. 使用zpid访问详细信息,例如https://www.zillow.com/homedetails/3756-Park-Pl-Addison-TX-75001/26935870_zpid/

    import re
    
    import httplib2
    http = httplib2.Http()
    status, response = http.request(webpage)
    response=response.decode('utf-8')
    
    import requests
    headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5)","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","accept-charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3","accept-encoding": "gzip,deflate,sdch","accept-language": "en-US,en;q=0.8",}
    response = requests.get(webpage, headers=headers)
    response=response.text
    
    webpage='https://www.zillow.com/homes/for_sale/75001_rb/2_p/'
    response = requests.get(webpage, headers=headers)
    response=response.text
    
    regex_longs='<meta itemprop="longitude" content="(.+?)"></meta></span><div class="zsg-photo-card-caption">'
    pattern_longs = re.compile(regex_longs)
    longs = re.findall(pattern_longs,response1)
    
    regex_id='></div><a href="(.+?)" class="zsg-photo-card-overlay-link routable hdp-link routable mask hdp-link">'
    pattern_id = re.compile(regex_id)
    ID = re.findall(pattern_id,response1)
    
  5. 我在谷歌Chrome和两个python软件包中有13个经度,但我从两个python软件包中只得到了12个zpid案例(谷歌浏览器中zpid的数量是13个)。

    更新:selenium包解决了这个问题。正如Charles Duffy所提到的,DOM导致浏览器和API之间的文本来源不同。

    P.S。这里的问题也可能与网络解析有关,因为重新包装不适合网络抓取。

1 个答案:

答案 0 :(得分:1)

我相信您正在废弃使用 JavaScript (动态网站)呈现的网站,这就是您在谷歌浏览器源代码和网络报废工具之间出现不一致的原因。

我建议使用其中任何一种来删除动态网站