python - Scrapy不抓取下一页url

标签 python web-scraping scrapy

我的蜘蛛没有爬行第 2 页,但 XPath 返回正确的下一页链接,这是到下一页的绝对链接。

这是我的代码

from scrapy import Spider
from scrapy.http import Request, FormRequest



class MintSpiderSpider(Spider):

    name = 'Mint_spider'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/']

    def parse(self, response):
        urls =  response.xpath('//div[@class = "post-inner post-hover"]/h2/a/@href').extract()

        for url in urls:
            yield Request(url, callback=self.parse_lyrics)

        next_page_url = response.xpath('//li[@class="next right"]/a/@href').extract_first()
        if next_page_url:
            yield scrapy.Request(next_page_url, callback=self.parse)


    def parse_foo(self, response):
        info = response.xpath('//*[@class="songinfo"]/p/text()').extract()
        name =  response.xpath('//*[@id="lyric"]/h2/text()').extract()

        yield{
            'name' : name,
            'info': info
        }

最佳答案

问题是 next_page_url 是一个列表,它需要是一个字符串形式的 url。您需要在 next_page_url = response.xpath('//li[@class="next right""中使用 extract_first() 函数而不是 extract() ]/a/@href').extract().

更新

由于您使用的是yield scrapy.Request(next_page_url, callback=self.parse),因此必须导入 scrapy

关于python - Scrapy不抓取下一页url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52501149/

相关文章:

python - 无法使用 AWS SAM 构建 python 应用程序

python - 如何在 SQLAlchemy 中查看连接表的列名?

python - MS SQL通过Windows命令从python恢复数据库

如果内容 ID 已经存在,python scrapy 不重新抓取的最佳方法

python - Scrapy CrawlerProcess 不使用 CrawlSpider 保存数据

python - tornado.gen.engine 与 tornado.gen.coroutine 的区别

go - 如何解析网页跨度中的值?

python - 使用 python lxml 从 IMDB 返回空列表

java - 使用 Jsoup 从表格和网站的所有选项卡获取链接

python - 为单个项目从多个来源收集数据的正确方法