【发布时间】:2019-12-31 20:07:10
【问题描述】:
我已经构建了一个在 scrapinghub 上运行的简单爬虫:
class ExtractionSpider(scrapy.Spider):
name = "extraction"
allowed_domains = ['domain']
start_urls = ['http://somedomainstart']
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
def parse(self, response):
urls = response.css('a.offer-details__title-link::attr(href)').extract()
print(urls)
for url in urls:
url = response.urljoin(url)
yield SplashRequest(url=url, callback=self.parse_details)
multiple_locs_urls = response.css('a.offer-regions__label::attr(href)').extract()
print(multiple_locs_urls)
for url in multiple_locs_urls:
url = response.urljoin(url)
yield SplashRequest(url=url, callback=self.parse_details)
next_page_url = response.css('li.pagination_element--next > a.pagination_trigger::attr(href)').extract_first()
if next_page_url:
next_page_url = response.urljoin(next_page_url)
yield SplashRequest(url=next_page_url, callback=self.parse)
def parse_details(self, response):
yield {
'title': response.css('#jobTitle').extract_first(),
'content': response.css('#description').extract_first(),
'datePosted': response.css('span[itemprop="datePosted"]').extract_first(),
'address': response.css('span[itemprop="address"]').extract_first()
}
我面临的问题是 multiple_locs_url response.css 返回一个空数组,尽管我在浏览器端的标记中看到它。
我检查了scrapy shell,但scrapy shell 没有看到标记。我猜这是由于加载页面时通过 javascript 呈现的标记。
我添加了飞溅,但这似乎不适用于响应。如何让 scrapy 等待查询,直到页面加载?
【问题讨论】:
-
你能提供 URL 并解释你想在其中抓取什么吗?
-
您是否尝试过为 Spash 的
wait参数设置不同的值,例如SPLASH_ARGS = {'wait': 2}(在蜘蛛类定义中)? -
没有
URL我不认为我们可以帮助你.. 可能有很多因素 1 )你使用的是同一个浏览器,你正在使用哪个用户代理(在某些情况下,网站会发送不同的响应不同的浏览器。2)也许内容正在通过 AJAX 调用或任何其他共享 URL 来帮助您加载 -
@akhter wahab 我的起始 url 是 pracuj.pl/praca/polska;ct,1 我已经尝试了各种配置,包括计时或执行带有 splash 的请求,然后尝试查询响应,但似乎没有一个工作。用户代理设置正确。
标签: python web-scraping scrapy scrapinghub splash-js-render