gpt4 book ai didi

web-crawler - 在scrapy中动态start_urls

转载 作者:行者123 更新时间:2023-12-03 23:58:08 27 4
gpt4 key购买 nike

我正在使用scrapy 来抓取站点上的多个页面。
变量 start_urls用于定义要抓取的页面。
我最初会从第一页开始,从而定义 start_urls = [1st page]在文件中 example_spider.py
从第一页获取更多信息后,我将确定要抓取的下一页是什么,然后分配 start_urls相应地。因此,我必须通过更改 start_urls = [1st page, 2nd page, ..., Kth page] 来覆盖上面的 example_spider.py ,然后再次运行scrapy crawl。

这是最好的方法还是有更好的方法来动态分配 start_urls使用scrapy API 而不必覆盖example_splider.py ?
谢谢。

最佳答案

start_urls class 属性包含起始 url - 仅此而已。如果您提取了要抓取的其他页面的网址 - 从 parse 产生使用 [another] 回调回调对应的请求:

class Spider(BaseSpider):

name = 'my_spider'
start_urls = [
'http://www.domain.com/'
]
allowed_domains = ['domain.com']

def parse(self, response):
'''Parse main page and extract categories links.'''
hxs = HtmlXPathSelector(response)
urls = hxs.select("//*[@id='tSubmenuContent']/a[position()>1]/@href").extract()
for url in urls:
url = urlparse.urljoin(response.url, url)
self.log('Found category url: %s' % url)
yield Request(url, callback = self.parseCategory)

def parseCategory(self, response):
'''Parse category page and extract links of the items.'''
hxs = HtmlXPathSelector(response)
links = hxs.select("//*[@id='_list']//td[@class='tListDesc']/a/@href").extract()
for link in links:
itemLink = urlparse.urljoin(response.url, link)
self.log('Found item link: %s' % itemLink, log.DEBUG)
yield Request(itemLink, callback = self.parseItem)

def parseItem(self, response):
...

如果您仍想自定义启动请求创建,请覆盖方法 BaseSpider.start_requests()

关于web-crawler - 在scrapy中动态start_urls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798235/

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