【问题标题】:How to assign an ID for each start_url in scrapy from dataframe如何为数据帧中的scrapy中的每个start_url分配一个ID
【发布时间】:2019-03-06 11:38:33
【问题描述】:

假设我有一个这样的数据框:

 id     url
 1      www.google.com
 2      www.youtube.com
 3      www.google.com
 4      wwww.facebook.com

如果我想迭代数据框中的每个 url。所以我要做的是:

start_urls = list(df['url'])

def parse(self,response):
    thing = response.css("*").extract()
    item = scrapyItem()
    item['content'] = thing
    yield item

这将遍历我的网址,并为每个网址生成一个项目。问题是,对于生成的文件,我无法区分不同的 id。

url 不是唯一的,我无法将 URL 分配为“id”,我需要数据框中的“id”列与 URL 相结合来生成唯一的 id。遍历我的网址时如何访问 id 列?或者,我可以采取哪些其他方法来实现我想要的?

编辑:我尝试将 url 保存为“id”,但由于 url 不是唯一的,这不起作用,scrapy 也可以异步工作,因此项目的顺序不会保持不变。

【问题讨论】:

    标签: python pandas web-scraping scrapy


    【解决方案1】:

    你可以试试iterrows:

    for index, row in df.iterrows():
        print(index, row['url'])
        parsed_response = parse(response)
        df.loc[index, 'scrapy_content'] = parsed_response
    

    https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.html

    【讨论】:

    • 我认为这不适用于 Scrapy。 start urls 为列表中的每个项目调用一个默认函数,或者其他什么。
    【解决方案2】:

    尽管有重复的 url,我仍然可以使用“response.url”作为 ID,尽管有重复的记录。重复记录无论如何都会返回相同的响应,因此我可以返回我的数据框并将相同的信息附加到我拥有该 ID 的每个地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2021-09-14
      • 1970-01-01
      • 2018-03-30
      • 2021-06-16
      • 2015-07-25
      • 2021-06-23
      相关资源
      最近更新 更多