【问题标题】:scrapy going through first link onlyscrapy 仅通过第一个链接
【发布时间】:2022-01-11 18:27:02
【问题描述】:

我一般来说是scrapy和python的新手,我正在尝试制作一个从页面中提取链接然后编辑这些链接然后遍历它们中的每一个的scraper。我正在使用scrapy的剧作家。

这是我所在的位置,但由于某种原因,它只抓取了第一个链接。

 def parse(self, response):
        for link in response.css('div.som a::attr(href)'):
            yield response.follow(link.get().replace('docs', 'www').replace('com/', 'com/#'),
                                  cookies={'__utms': '265273107'},
                                  meta=dict(
                                      playwright=True,
                                      playwright_include_page=True,
                                      playwright_page_coroutines=[
                                          PageCoroutine('wait_for_selector', 'span#pple_numbers')]
                                  ),
                                  callback=self.parse_c)

    async def parse_c(self, response):
        yield {
            'text': response.css('div.pple_numb span::text').getall()

【问题讨论】:

    标签: python scrapy playwright-python


    【解决方案1】:

    如果您可以添加有关您尝试获取的数据的更多详细信息,那就太好了。因此,您可以添加指示的行以查看它是否通过不同的链接?

     def parse(self, response):
            for link in response.css('div.som a::attr(href)'):
                print(link) <--- //could you add this line to check if prints all the links?
    

    【讨论】:

    • 是的,它通过打印捕获所有链接就好了,但不确定它是否假设是字符串或列表,当我打印类型时它得到我这个
    • 您还可以在 for 循环之前打印响应以检查数据是否到来,我们可以更好地了解问题。
    • 一切正常,直到它开始抓取它只通过第一行(link.get),我试图把它放在一个列表中同样的问题..也许回调函数有某种错误并假设遍历所有链接,但老实说,我不知道我说我是新手
    【解决方案2】:

    根据文档,follow 有两个函数:

    1. follow:

    返回一个请求实例以跟随链接 url。它接受相同的 参数为 Request.__init__ 方法,但 url 不仅可以是 绝对 URL,还有一个相对 URL,一个 Link 对象,例如链接提取器的结果,...

    1. follow_all

    生成请求实例以跟随所有链接的生成器 网址。它接受与Request’s __init__ 方法相同的参数, 除了每个 urls 元素不需要是绝对 URL 之外,它 可以是以下任何一种:相对 URL、Link 对象,例如链接提取器的结果,...

    如果您尝试使用 follow_all 而不是仅使用 follow 编写代码,它应该可以解决问题。

    【讨论】:

    • 不,这不是问题,问题是我添加了 com/# 所以它会将其视为重复请求或其他东西,所以我只是将 dont_filter=True 添加到响应中,一切顺利,谢谢很多人真的很感谢你的帮助
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多