【问题标题】:How to fix the order problem when using scrapy?使用scrapy时如何解决订单问题?
【发布时间】:2019-04-01 04:34:24
【问题描述】:

我相信这是一个简单的,我愿意学习更多。问题是我想通过 URL 抓取网站标题。这样做的目的是预测在线新闻的流行度,数据来自 UCI 机器学习存储库。这里是the link

我按照 Scrapy 的教程,将“quotes spider”中的代码更改如下。在终端中运行“scrapy crawl quotes”后,我使用“scrapy crawl quotes -o quotes.json”将所有标题保存为JSON。

有 158 人失踪。我有 39,486 个 URL,但有 39,644 个网站标题。此外,每个网站的顺序并不适合每个 URL。例如,最终标题对应倒数第三个 URL。你能帮我找出问题吗?

这是结果

我尝试在 Jupyter Notebook 中使用“美丽的汤”,但速度很慢,无法判断代码是否仍在运行。

import scrapy
import pandas as pd


df = pd.read_csv("/Users/.../OnlineNewsPopularity.csv",delim_whitespace=False)
url = df['url']

class QuotesSpider(scrapy.Spider):
    name = "quotes"    
    start_urls = url.values.tolist()

    def parse(self, response):
        for quote in response.css('h1.title'):
            yield {
                'Title': quote.css('h1.title::text').extract_first(),
            }

【问题讨论】:

    标签: python python-3.x scrapy


    【解决方案1】:

    如果您的目标只是保持 URL 和标题之间的对应关系,您可以将 URL 添加到您的抓取项目:

    def parse(self, response):
        for quote in response.css('h1.title'):
            yield {
                'Title': quote.css('h1.title::text').extract_first(),              
                'url': response.url
            }
    

    相反,如果要按顺序处理 URL,有多种方法,稍微复杂一些。 最常见的想法是写一个方法start_request,在这里你只请求第一个URL;然后,在方法解析中,您请求第二个 URL,将相同的方法(解析)设置为回调;等等……

    Sequential scraping from multiple start_urls leading to error in parsingScrapy Crawl URLs in Order

    【讨论】:

    • 它会做的工作,非常感谢!抓取到网站标题后,只需要将它们合并在一起即可。
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2022-07-05
    • 2019-09-21
    • 2019-03-05
    • 2018-06-17
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多