![](/img/trans.png)
[英]How to download (PDF) files with Python/Scrapy using the Files Pipeline?
[英]Using Scrapy: how to download pdf files from some extracted links
我已经创建了从网站中提取一些链接的代码(PDF链接),现在我需要下载这些PDF文件,但是我在努力做到这一点上却很费力。 这是代码:
import scrapy
class all5(scrapy.Spider):
name = "all5"
start_urls = [
'https://www.alloschool.com/course/alriadhiat-alaol-ibtdaii',
]
def parse(self, response):
for link in response.css('.default .er').xpath('@href').extract():
url=response.url
path=response.css('ol.breadcrumb li a::text').extract()
next_link = response.urljoin(link)
yield scrapy.Request(next_link,callback=self.parse_det,meta={'url' : url,'path':path})
def parse_det(self, response):
def extract_with_css(query):
return response.css(query).get(default='').strip()
yield {
'path':response.meta['path'],
'finallink': extract_with_css('a.btn.btn-primary::attr(href)'),
'url':response.meta['url']
}
我需要下载的链接是“ finallink”。
我该如何解决这个问题?
在设置中,您必须激活管道
ITEM_PIPELINES = {'scrapy.pipelines.files.FilesPipeline': 1}
和下载文件的文件夹
'FILES_STORE' = '.'
它将下载到FILES_STORE/full
并且在生成数据时必须使用名称files_url
yield {
'file_urls': [extract_with_css('a.btn.btn-primary::attr(href)')]
# ... rest ...
}
即使您要下载一个文件,它也必须是列表。
它应该将PDF下载到具有唯一名称的文件中,您可以在字段files
中的数据中获取
Scrapy doc: 下载和处理文件和图像
编辑:独立代码-您可以复制和运行而无需创建项目。
#!/usr/bin/env python3
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = [
'https://www.alloschool.com/course/alriadhiat-alaol-ibtdaii',
]
def parse(self, response):
for link in response.css('.default .er').xpath('@href').extract():
url = response.url
path = response.css('ol.breadcrumb li a::text').extract()
next_link = response.urljoin(link)
yield scrapy.Request(next_link, callback=self.parse_det, meta={'url': url, 'path': path})
def parse_det(self, response):
def extract_with_css(query):
return response.css(query).get(default='').strip()
yield {
'path':response.meta['path'],
'file_urls': [extract_with_css('a.btn.btn-primary::attr(href)')],
'url':response.meta['url']
}
from scrapy.crawler import CrawlerProcess
c = CrawlerProcess({
'USER_AGENT': 'Mozilla/5.0',
# save in file as CSV, JSON or XML
'FEED_FORMAT': 'csv', # csv, json, xml
'FEED_URI': 'output.csv', #
# download files to `FILES_STORE/full`
# it needs `yield {'file_urls': [url]}` in `parse()`
'ITEM_PIPELINES': {'scrapy.pipelines.files.FilesPipeline': 1},
'FILES_STORE': '.',
})
c.crawl(MySpider)
c.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.