Python Scrapy:响应对象与浏览器中的源代码不同
我正在做一个使用Scrapy的项目。
除了一个字段外,其他所有想要的信息都能顺利抓取。缺失的那个字段在Scrapy的响应中根本没有显示(我在scrapy shell中检查过),但当我用浏览器访问这个页面时,它是可以看到的。在Scrapy的响应中,预期的标签是存在的,但标签之间的文本却没有。
这个页面没有用到JavaScript,但这个字段是由服务器提供的(它显示的是当前访问该页面的次数)。也没有使用iframe。
我已经在设置文件中把用户代理设置成和我的浏览器一致。下载延迟也设置成了5秒。
补充说明:
页面链接: http://www.fincaraiz.com.co/apartamento-en-venta/bogota/salitre-det-1337688.aspx
想要抓取的元素的Xpath://*[@id="numAdvertVisits"]
这到底是什么原因呢?
1 个回答
这是一个通过ajax/javascript加载的值。
你采取了什么步骤来确认没有使用JS呢?我在没有开启javascript的情况下加载了页面,虽然那个区域显示了占位内容(“Visitas”),但实际的数据是通过ajax请求写入的。
你仍然可以使用scrapy加载这些数据,只是需要额外请求一个通常通过页面上的ajax访问的URL。服务器会以XML格式返回访问次数,具体通过这个链接获取:http://www.fincaraiz.com.co/WebServices/Statistics.asmx/GetAdvertVisits?idAdvert=1337688&idASource=40&idType=1001(试着打开这个链接,你会看到你在原始邮件中提供的页面的访问次数)。
还有另一个ajax请求会返回“True”这个值,但我不太确定这个数据的实际含义。不过,这可能还是有用的: