我正在尝试为动态网站创建网络抓取工具。为此,我使用了 Scrapy 1.2.1 和 scrapy-splash 0.7 库。使用splash server时会出现问题,大多数时候它会返回不同的数据给scrapy。从日志中我可以看到所有页面都被爬取。如果我使用 scrapy.Request 而不是 SplashRequest,一切正常(我每次都得到相同的数据)。
我的代码:
import scrapy
import re
from scrapy_splash import SplashRequest
from scraper.items import ScraperRozetka
class RozetkaSpider(scrapy.Spider):
name = "rozetka_laptops"
start_urls = [
'http://rozetka.com.ua/notebooks/c80004/filter/producer=dell;page=1/',
]
def parse(self, response):
last_page = response.xpath('//ul[@name="paginator"]//li[last()]//@id').extract_first()
last_page_num = int(last_page[-1])
i = 1
while i <= last_page_num:
url = re.sub(r'page=\d+', r'page={}'.format(i), response.url)
i += 1
yield SplashRequest(url, self.parse_results, endpoint='render.html', args={'wait': 0.5, 'timeout': 60})
def parse_results(self, response):
items = []
records = response.css('div.g-i-tile-catalog')
for record in records:
item = ScraperRozetka()
item['title'] = record.css('img::attr(title)').extract_first()
item['price'] = record.css('div.g-price-uah::text').extract_first()
item['link'] = record.css('div.g-i-tile-i-title a::attr(href)').extract_first()
items.append(item)
return items
如果有人帮助我,将不胜感激。谢谢。