【发布时间】:2020-07-26 04:18:17
【问题描述】:
我有一个蜘蛛,它以四个不同的start_urls 开头,然后继续爬取里面的某些链接。它们都具有相同的域和结构,唯一改变的是它们之间的查询参数。我使用了两条规则:一条用于打开和解析每个链接,另一条用于分页。
我的问题是:由于分页产生的大量链接,我不想抓取所有链接,所以我需要检查每个抓取的链接是否有条件(出版年份),并且只要那一年不同比我想要的年份,蜘蛛应该忽略对属于该 start_url 的所有剩余链接的抓取,然后继续使用第二个 start_url 生成的链接。我该怎么做呢?这是我的蜘蛛的代码:
class articleSpider(CrawlSpider):
name = 'article'
allowed_domains = ['website.com']
start_urls = [
'https://www.website.com/search/?category=value1',
'https://www.website.com/search/?category=value2',
'https://www.website.com/search/?category=value3',
'https://www.website.com/search/?category=value4',
]
rules = (
Rule(
LinkExtractor(
restrict_xpaths="//div[@class='results-post']/article/a"
),
callback='parse_item',
follow=True,
),
Rule(
LinkExtractor(
restrict_xpaths="//section[@class='results-navi'][1]/div/div[@class='prevpageNav left']"
)
)
)
def parse_item(self, response):
name = response.url.strip('/').split('/')[-1]
date = response.xpath("//section/p/time/@datetime").get()[:4]
if date == '2020':
with open(f'./src/data/{name}.html', 'wb') as f:
f.write(response.text.encode('utf8'))
return
提前感谢您的帮助。
【问题讨论】:
标签: python web-scraping scrapy web-crawler