我正在使用具有两条规则的 CrawlSpider。一条规则将文章链接从页面中取出,并将它们发送出去以存储在 CSV 中。另一个找到“下一页”链接并跟随它。
但是,下一页链接总是返回有点混乱。因此,我需要修复 URL(我可以这样做),然后让该页面抓取更多链接(我不知道该怎么做)。
从我读过的内容来看,我似乎需要创建一个请求,但不幸的是我并不真正了解它是如何工作的。该请求是否意味着给它的页面将像所有其他页面一样被抓取?我的 CrawlSpider 规则是否仍适用于该页面上的链接?
我曾尝试使用 Request(),但似乎没有遵循该链接。我检查了链接,它工作正常,并且该页面上有链接可供关注。
这是代码:
class MySpider(CrawlSpider):
name = 'ContentSpider'
allowed_domains = ['bbc.co.uk']
start_urls = ['http://www.bbc.co.uk/search/news/?q=credit card']
rules = (
Rule(SgmlLinkExtractor(restrict_xpaths=('//div[@class="cmWidget news"]/div[@id="news-content"]'), allow=('http\:\/\/www\.bbc\.co\.uk\/news\/.')), callback='parse_item', follow=False),
Rule(SgmlLinkExtractor(restrict_xpaths=('//div[@class="pagination"]'), allow=()), callback='parse_follow'),
)
def __init__(self, **kwargs):
CrawlSpider.__init__(self, **kwargs)
logfile = open('testlog.log', 'w')
log_observer = ScrapyFileLogObserver(logfile, level=logging.DEBUG)
log_observer.start()
log.start(loglevel=logging.DEBUG)
def parse_item(self, response):
item = CreditcrawlerItem()
item['url'] = response.url
return item
def parse_follow(self, response):
marker1 = response.url.find("?") + 1
marker2 = response.url.find("page")
fixed_url = response.url[:marker1] + response.url[marker2:] + "&" + response.url[marker1:marker2 - 1]
fixed_url = fixed_url.replace("+"," ")
return Request(fixed_url)
谢谢你的帮助。综上所述,问题是我需要关注这些“下一页”链接,但链接坏了。我可以修复链接,但我不知道如何再次关注它们。