目前,我正在尝试编程我自己的网络爬虫真实的地产搜索在维也纳.为此,我使用的CrawlSpider类从Scrapy.我现在发现使用 shell 函数从Scrapy是,LinkExtractor不找到网页上的所有链接.我怎么能解决这个问题?
谢谢jamfleck
PS:如果我的解释缺乏细节,对不起,我是相当新的stackoverflow。
### I open the shell in the anaconda command prompt.
### The url is a overview page of several house listings.
scrapy shell https://www.willhaben.at/iad/immobilien/haus-kaufen/wien
### Import of the scrapy linkextractor:
from scrapy.linkextractors import LinkExtractor
### I create the linkextractor to search for listings.
### I found out that all listings have a 'd/haus-kaufen/wien' in their url
le = LinkExtractor(allow='d/haus-kaufen/wien')
### Extract all the links:
links = le.extract_links(response)
### Print out the links
for l in links:
...: print(l.url)
输出:
https://www.willhaben.at/iad/immobilien/d/haus-kaufen/wien/wien-1110-simmering/einfamilienhaus-pool-140m2-keller-und-ca-243m2-garten-kamin-fussbodenheizung-2018-2019-eg-saniert-in-wenigen-minuten-simmering-u3-601664118/
https://www.willhaben.at/iad/immobilien/d/haus-kaufen/wien/wien-1220-donaustadt/tausch-reihenhaus-gegen-wohnung-663241383/
https://www.willhaben.at/iad/immobilien/d/haus-kaufen/wien/wien-1170-hernals/knusperhaeuschen-im-gruenen-diverse-obstbaeume-seele-baumeln-lassen-667128712/
https://www.willhaben.at/iad/immobilien/d/haus-kaufen/wien/wien-1130-hietzing/sonniges-einfamilienhaus-aus-familienbesitz-in-1130-wien-667121768/
总共有4个链接出现,但当我在网页上看他们应该更多,约20。
1条答案
按热度按时间zfciruhq1#
现代网站通常使用Javascript来动态加载不需要的内容。这提高了初始页面加载,但大多数抓取器无法处理JS,这意味着这些内容对他们来说是不可见的。
你链接的网站正是这样做的。如果你用像NoScript这样的Javascript拦截器访问页面,只有前4-5个帖子是可见的,因为其余的帖子会通过Javascript获取。
Scrapy's website has a writeup about workarounds for this issue。
关于这个特定站点的有趣的事情是,他们实际上在初始请求中获取了所有条目,并且之后只使用JS来构建UI。
您可以在原始网站HTML中看到它:
因此,在这个特定的例子中,您可以提取HTML中包含的这个JSON对象来获得搜索请求的结果。
可能的XPath:
//*[@id="skip-to-content"]/div/script
希望有帮助!