gpt4 book ai didi

python - 强制 scrapy 抓取链接以使其出现

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:14 28 4
gpt4 key购买 nike

我正在用scrapy写一个蜘蛛来抓取一个网站,索引页面是一个链接列表,比如www.link1.com, www.link2.com, www.link3.com并且该网站经常更新,所以我的爬虫程序是每个小时运行的过程的一部分,但我只想爬取我尚未爬取的新链接。我的问题是 scrapy 在深入时随机化处理每个链接的方式。是否可以强制 sracpy 按顺序爬行?像 1 然后 2 然后 3,这样我就可以保存我爬取的最后一个链接,当再次开始该过程时只需将链接 1 与以前的链接 1 进行比较?

希望这是可以理解的,抱歉我的英语不好,

请回复,

谢谢

编辑:

class SymantecSpider(CrawlSpider):

name = 'symantecSpider'
allowed_domains = ['symantec.com']
start_urls = [
'http://www.symantec.com/security_response/landing/vulnerabilities.jsp'
]
rules = [Rule(SgmlLinkExtractor(restrict_xpaths=('//div[@class="mrgnMD"]/following-sibling::table')), callback='parse_item')]

def parse_item(self, response):
open("test.t", "ab").write(response.url + "\n")

最佳答案

试试这个例子。
构建一个列表并将所有链接附加到它。
然后将它们一一弹出,让您的请求井井有条。

我建议做一些类似@Hassan mention 的事情,并将您的内容通过管道传输到数据库。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from scrapy import log


class SymantecSpider(BaseSpider):
name = 'symantecSpider'
allowed_domains = ['symantec.com']
allLinks = []
base_url = "http://www.symantec.com"

def start_requests(self):
return [Request('http://www.symantec.com/security_response/landing/vulnerabilities.jsp', callback=self.parseMgr)]

def parseMgr(self, response):
# This grabs all the links and append them to allLinks=[]
self.allLinks.append(HtmlXPathSelector(response).select("//table[@class='defaultTableStyle tableFontMD tableNoBorder']/tbody/tr/td[2]/a/@href").extract())
return Request(self.base_url + self.allLinks[0].pop(0), callback=self.pageParser)

# Cycle through the allLinks[] in order
def pageParser(self, response):
log.msg('response: %s' % response.url, level=log.INFO)
return Request(self.base_url + self.allLinks[0].pop(0), callback=self.pageParser)

关于python - 强制 scrapy 抓取链接以使其出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672513/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com