我正在Zillow网站上进行网络抓取,我尝试了两个Python库来获取网络文本(使用请求和httplib2)。由于网络(使用谷歌浏览器查看来源)和网络抓取工具之间的文本来源不同,我遇到了不一致的待售案例数量
我的代码包括三个步骤。
通过邮政编码(如https://www.zillow.com/homes/for_sale/75001_rb/2_p/)
获取经度,纬度和zpid(例如/ homedetails / 3756-Park-Pl-Addison-TX-75001 / 26935870_zpid /)
使用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)
我在谷歌Chrome和两个python软件包中有13个经度,但我从两个python软件包中只得到了12个zpid案例(谷歌浏览器中zpid的数量是13个)。
更新:selenium包解决了这个问题。正如Charles Duffy所提到的,DOM导致浏览器和API之间的文本来源不同。
P.S。这里的问题也可能与网络解析有关,因为重新包装不适合网络抓取。