python - 使用scrapy获取url列表,然后只发送不在给定列表中的请求
问题描述
我想每天抓取一个网站,但只抓取新内容。到目前为止,我已经设置了一个规则,已经刮掉的 url 不会被刮掉,但我想要的是将这些 url 标记为 arleady 刮掉。换句话说,我不想发送请求,而是将该 url 放入列表变量中。
rules = (
Rule(LinkExtractor(restrict_xpaths="//div[@class='next-page-block no-print']/a"), follow=True),
Rule(LinkExtractor(restrict_xpaths="//div[@class='list-item']/a", deny=alreadyScraped), callback='parse_item', follow=True)
)
我可以检查 url 是否在列表中,如果没有,则发送请求,如果是 - 放入列表变量中。
rules = (
Rule(LinkExtractor(restrict_xpaths="//div[@class='next-page-block no-print']/a"), follow=True),
Rule(LinkExtractor(restrict_xpaths="//div[@class='list-item']/a"), callback='parse_item', follow=True, process_request='checkIfScraped')
def checkIfScraped(self, request):
#code here
编辑:
def checkIfScraped(self, request):
if request.url in self.alreadyScraped:
#put url in a list
else:
return request
我能够收集这些 url,但是否可以将它们输出到与 parse_item 相同的输出中?
def parse_item(self, response):
yield {
'url': response.request.url,
'new': 1
}
如果 url 进入那个已经被抓取的列表,我需要 yield {..., 'new': 0}
解决方案
推荐阅读
- bash - bash中的插入排序
- json - 如何在 JSON 序列化中添加括号?
- regex - PowerShell - 用于更改多值字段中的分隔符的正则表达式
- azure-application-insights - Visual Studio App Center - 按时间查找诊断日志
- bash - 如何访问用户主目录
- android - 安卓。活动不是从服务开始的
- linux - 使用 ansible playbook 修改 sshd_config 中的 AllowGroups
- java - java比较逗号分隔的字符串
- python - 欧拉计划问题 #1 - 没有得到正确的答案
- node.js - 单击基于 $eval 的 div 会引发 div click 不是 puppeteer 中的功能