使用Python递归抓取页面(草率)

用户名

我正在尝试制作一个程序,以在转到下一页时检索商品的标题和价格。

现在,第一页的所有信息(标题,价格)均已提取,但程序不会转到下一页

网址:https//scrapingclub.com/exercise/list_basic/

import scrapy
class RecursiveSpider(scrapy.Spider):
    name = 'recursive'
    allowed_domains = ['scrapingclub.com/exercise/list_basic/']
    start_urls = ['http://scrapingclub.com/exercise/list_basic//']

    def parse(self, response):
        card = response.xpath("//div[@class='card-body']")
        for thing in card:
            title = thing.xpath(".//h4[@class='card-title']").extract_first()
            price = thing.xpath(".//h5").extract_first
            yield {'price' : price, 'title' : title}
            
            
            next_page_url = response.xpath("//li[@class='page-item']//a/@href")
            if next_page_url:
                absolute_nextpage_url = response.urljoin(next_page_url)
                yield scrapy.Request(absolute_nextpage_url) ```
雷那托

您应该在这种情况下添加执行日志,这将有助于查明您的问题。

我可以看到一些问题:

        next_page_url = response.xpath("//li[@class='page-item']//a/@href")
        if next_page_url:
            absolute_nextpage_url = response.urljoin(next_page_url)

该变量next_page_url包含选择器,而不是字符串。您需要使用该.get()方法来提取带有相对URL的字符串。

之后,我执行了您的代码,返回了:

2020-09-04 15:19:34 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'scrapingclub.com': <GET https://scrapingclub.com/exercise/list_basic/?page=2>

它过滤请求,因为它认为它是非现场请求,即使不是。要修复它,只需使用allowed_domains = ['scrapingclub.com']或完全删除此行。如果您想了解更多此过滤器的工作原理,请在此处查看源代码

最后,在for循环下包含以下代码段是没有意义的:

        next_page_url = response.xpath("//li[@class='page-item']//a/@href").get() # I added the .get()
        if next_page_url:
            absolute_nextpage_url = response.urljoin(next_page_url)
            yield scrapy.Request(absolute_nextpage_url) 
  • 如果使用get()method,它将返回到next_page_url第一项(现在是第2页,但是在下一个回调中将是第1页,因此您将永远不会前进到第3页)。
  • 如果使用getall()它,将返回一个列表,您需要对其进行迭代以产生所有可能的请求,但这是一个递归函数,因此最终需要在每个递归步骤中执行此操作。

最好的选择是选择下一个按钮而不是页码:

next_page_url = response.xpath('//li[@class="page-item"]/a[contains(text(), "Next")]/@href').get()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用python硒从页面递归地抓取表格

来自分类Dev

抓取链接后未显示结果的后续页面结果(草率)

来自分类Dev

使用Python请求抓取页面

来自分类Dev

使用 Python 抓取特定页面

来自分类Dev

如何使用BeautifulSoup和Python抓取页面?

来自分类Dev

使用Python抓取JavaScript生成的页面

来自分类Dev

使用python为多个页面抓取网页

来自分类Dev

使用 Python 抓取 TripAdvisor 酒店页面

来自分类Dev

使用 BeautifulSoup 在 python 中抓取多个页面

来自分类Dev

使用Scrapy和Python 2.7的递归抓取Craigslist

来自分类Dev

使用cheerio 抓取页面

来自分类Dev

如何使用草率的CSVFeedSpider抓取其值中带有逗号的Feed?

来自分类Dev

Python + scrapy + 网页抓取:页面未被抓取

来自分类Dev

使用python抓取网站时获取最大页面数

来自分类Dev

使用Selenium(Python3)抓取网站的多个页面

来自分类Dev

如何使用Python和BeautifulSoup抓取多个Google页面

来自分类Dev

使用R或Python抓取网页和相关的后续页面

来自分类Dev

在Python中使用笨拙的JSON格式抓取页面

来自分类Dev

如何使用python HTMLParser从HTML页面中抓取特定值

来自分类Dev

Python-使用BeautifulSoup在页面内抓取多个类

来自分类Dev

使用python抓取网站时获取最大页面数

来自分类Dev

使用python访问和网页抓取动态页面

来自分类Dev

使用 BeautifulSoup 和 Python 抓取多个表格页面

来自分类Dev

如何使用python BeautifulSoup通过分页抓取页面

来自分类Dev

属性错误 - 使用 WebDriver 在 Python 中抓取页面...?

来自分类Dev

尝试使用 Python 3 抓取页面的错误请求

来自分类Dev

使用列表列表清理python中的草率“ for”循环

来自分类Dev

Python Web抓取页面循环

来自分类Dev

python beautifulsoup抓取存档页面

Related 相关文章

  1. 1

    如何使用python硒从页面递归地抓取表格

  2. 2

    抓取链接后未显示结果的后续页面结果(草率)

  3. 3

    使用Python请求抓取页面

  4. 4

    使用 Python 抓取特定页面

  5. 5

    如何使用BeautifulSoup和Python抓取页面?

  6. 6

    使用Python抓取JavaScript生成的页面

  7. 7

    使用python为多个页面抓取网页

  8. 8

    使用 Python 抓取 TripAdvisor 酒店页面

  9. 9

    使用 BeautifulSoup 在 python 中抓取多个页面

  10. 10

    使用Scrapy和Python 2.7的递归抓取Craigslist

  11. 11

    使用cheerio 抓取页面

  12. 12

    如何使用草率的CSVFeedSpider抓取其值中带有逗号的Feed?

  13. 13

    Python + scrapy + 网页抓取:页面未被抓取

  14. 14

    使用python抓取网站时获取最大页面数

  15. 15

    使用Selenium(Python3)抓取网站的多个页面

  16. 16

    如何使用Python和BeautifulSoup抓取多个Google页面

  17. 17

    使用R或Python抓取网页和相关的后续页面

  18. 18

    在Python中使用笨拙的JSON格式抓取页面

  19. 19

    如何使用python HTMLParser从HTML页面中抓取特定值

  20. 20

    Python-使用BeautifulSoup在页面内抓取多个类

  21. 21

    使用python抓取网站时获取最大页面数

  22. 22

    使用python访问和网页抓取动态页面

  23. 23

    使用 BeautifulSoup 和 Python 抓取多个表格页面

  24. 24

    如何使用python BeautifulSoup通过分页抓取页面

  25. 25

    属性错误 - 使用 WebDriver 在 Python 中抓取页面...?

  26. 26

    尝试使用 Python 3 抓取页面的错误请求

  27. 27

    使用列表列表清理python中的草率“ for”循环

  28. 28

    Python Web抓取页面循环

  29. 29

    python beautifulsoup抓取存档页面

热门标签

归档