gpt4 book ai didi

python - 使用 Scrapy 抓取 CSV

转载 作者:行者123 更新时间:2023-12-01 02:41:45 24 4
gpt4 key购买 nike

我正在尝试从该网站抓取所有 CSV:transparentnevada.com

当您导航到特定机构时,即 http://transparentnevada.com/salaries/2016/university-nevada-reno/ ,然后点击“下载记录”,其中有一个指向多个 CSV 的链接。我想下载所有 CSV。

我的蜘蛛运行并似乎抓取了所有记录,但没有下载任何内容:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request


class Spider2(CrawlSpider):
#name of the spider
name = 'nevada'

#list of allowed domains
allowed_domains = ['transparentnevada.com']

#starting url for scraping
start_urls = ['http://transparentnevada.com/salaries/all/']
rules = [
Rule(LinkExtractor(
allow=['/salaries/all/*']),
follow=True),
Rule(LinkExtractor(
allow=['/salaries/2016/*/']),
follow=True),
Rule(LinkExtractor(
allow=['/salaries/2016/*/#']),
callback='parse_article',
follow=True),
]

#setting the location of the output csv file
custom_settings = {
'FEED_FORMAT' : "csv",
'FEED_URI' : 'tmp/nevada2.csv'
}

def parse_article(self, response):
for href in response.css('div.view-downloads a[href$=".csv"]::attr(href)').extract():
yield Request(
url=response.urljoin(href),
callback=self.save_pdf
)

def save_pdf(self, response):
path = response.url.split('/')[-1]
self.logger.info('Saving CSV %s', path)
with open(path, 'wb') as f:
f.write(response.body)

最佳答案

问题是 CSV 位于 /export/ 上,而您在规则中没有对它们执行任何操作

我向您的抓取工具添加了一个简单的 LinkExtractor,它正在下载文件

Rule(LinkExtractor(
allow=['/export/.*\.csv']),
callback='save_pdf',
follow=True),

此外,您的上述规则并不是 100% 正确,您使用了“/*”,而它应该是“/.*/”。

“/*”表示斜杠存在或者存在多次,例如“////”。因此,修改您的规则,添加我给出的规则,这应该可以完成工作

关于python - 使用 Scrapy 抓取 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com