您现在的位置是: 网站首页> 学习笔记> scrapy scrapy
scrapy文件下载(高新技术企业认定网)
2021-01-03 [文件下载] [scrapy] 4328人已围观
1. spider.py
# -*- coding: utf-8 -*-
import scrapy
from ..items import XxItem
class GxSpider(scrapy.Spider):
name = 'gx'
allowed_domains = ['innocom.gov.cn']
t_pages = 14
start_urls = ['http://www.innocom.gov.cn/gxjsqyrdw/gswj/list{}.shtml'.format('' if page ==1 else '_'+str(page)) for page in range(1, t_pages+1)]
def parse(self, response):
url_list = response.xpath('//div[@class="list7"]//ul//a/@href').extract()
for url in url_list:
yield scrapy.Request(response.urljoin(url), callback=self.parse_detail)
def parse_detail(self, response):
a_list = response.xpath('//div[@id="content"]//a')
for a in a_list:
title = a.xpath('string(.)').extract_first()
if '更名' in title or '取消' in title or '变更' in title: # 更名、取消公告中内容是图片,不处理更名公告
continue
url = a.xpath('@href').extract_first()
item = XxItem()
item['file_url'] = response.urljoin(url) # 文件下载地址
item['file_name'] = title # 保存的文件名称
yield item
2. items.py
import scrapy
class XxItem(scrapy.Item):
file_url = scrapy.Field()
file_name = scrapy.Field()
3. pipelines.py
from scrapy import Request
from scrapy.pipelines.files import FilesPipeline
class GxPipeline(FilesPipeline):
def get_media_requests(self, item, info):
if item['FILENETURL'] == '':
return None
# 如果url是列表需要循环发出请求
yield Request(item['file_url'], meta={'name':item['file_name']})
def file_path(self, request, response=None, info=None):
file_name = request.meta['name'] # 重命名文件名称,也可以加入子目录
return file_name +'.' + request.url.split('.')[-1]
def item_completed(self, results, item, info):
file_paths = [x['path'] for ok, x in results if ok]
if not file_paths :
with open('download-fail-url.txt', 'aw') as f:
f.write(item['file_name'] + '---' + item['file_url'] + '\n')
return item
4. settings.py
ITEM_PIPELINES = {
'zx_gxjsqy.pipelines.GxPipeline': 300,
}
# 设置文件存储目录
FILES_STORE = r'files'
相关文章
文章评论
暂无评论添加评论
点击排行
本栏推荐
标签云
热评文章
- django使用qq邮箱发送邮件
- mysql8设置数据库远程连接
- pip修改下载源为国内源
- win10看不到win7共享的文件夹的解决方法
- SQLyog连接 Mysql 8.0.11 报error no.1251- Client does not support authentic...
- 使用Oracel Net Nanager配置Oracle数据库远程访问
- 将anaconda的下载源切换为国内的源
- Python+selenium+firefox设置代理IP
- selenium+firefox+js实现动态设置firefox浏览器代理IP
- scrapy文件下载(高新技术企业认定网)
- Python调用JS代码
- Chrome浏览器的overrides的使用
站点信息
- 建站时间:2021-01-01
- 网站程序:Django 3.1.2
- 文章统计:53篇
- 文章评论:36条
- 统计数据: