python爬虫智能翻页批量下载文件的实例详解


Posted in Python onFebruary 02, 2021

python爬虫遇到爬取文件内容时,需要一页页的翻页爬取,这样很是麻烦,其实可以获取每个列表信息下的文件名和文件链接,让文件名和文件链接处理为列表,保存后下载,实现智能翻页批量下载文件,本文以以京客隆为例,批量下载文件,如财务资料,他的每一份报告都是一份pdf格式的文档。以此页面为目标,下载他每个分类的文件python爬虫实战之智能翻页批量下载文件。

1、引入库

import requests
import pandas as pd
from lxml import etree
import re
import os

2、解析初始页面

baseUrl ='http://www.jkl.com.cn/cn/invest.aspx' # 爬取页面的数据
heade ={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/81.0.4044.92 Safari/537.36'
}
res =requests.get(url=baseUrl,headers=heade).text  
# print(res.text)
html = etree.HTML(res)
res =requests.get(url=baseUrl,headers=heade).text  #  设置变量接受 基础页的响应数据
# print(res.text)
html = etree.HTML(res)

3、获得投资关系的分类名称和url地址

data_name = html.xpath('//div[@class="infoLis"]//a/text()') # 投资者列表的名字
data_link = html.xpath('//div[@class="infoLis"]//@href')  # 全部列表的链接
name = [data_name.strip() for data_name in data_name]  # 通过for循环去掉空字符
link = ['http://www.jkl.com.cn/cn/'+ data_link for data_link in data_link] # 拼接字符串
# 合并为字典,方便保存文件
file = dict(zip(name,link))

4、每个列表信息,保存一个文件夹

for name,link in file.items():
  name=name.replace('/','.')
  name=name.replace('...','报表')
  # 上面的把文件名带特许字符的 强制转换为我们想要的文本类型
  path = 'E:/'+ name
  if not os.path.exists(path):
    os.mkdir(path)
    #建立储存位置

5、对列表的每个项目链接进行解析,拿到尾页

res_list = requests.get(url = link, headers = heade).text
  list_html = etree.HTML(res_list)
  # print(html_erJi) 解析每个分类的链接
  weiYe = list_html.xpath('//a[text()="尾页"]/@href')
  # print(html_weiye)
  # 拿到尾页信息
  if weiYe !=[]:
    # 正则提取尾页信息
    get_weiYe =re.search("(\d+)'\)",html_weiye[0])
    get_yeMa = get_html_weiYe.group(1)
  else:
    get_yeMa=1
  # print(get_html_yeMa) 看看是不是提取成功

6、获取每个列表信息下的文件名和文件链接

for get_yeMa in range(1,int(get_yeMa)+1): # 翻页
    yaMa= {
    '__EVENTTARGET': 'AspNetPager1',
    '__EVENTARGUMENT': get_yeMa
    }
    get_lei_html = requests.get(url = link, headers = heade, params = yaMa).text
    res3 =etree.HTML(get_lei_html)
    # print(res3)
    pdf_name = res3.xpath('//div[@class="newsLis"]//li/a/text()')
    # print(pdf_name)
    pdf_url = res3.xpath('//div[@class="newsLis"]//li//@href')

7、让文件名和文件链接处理为列表,保存后下载

pdf_names = [pdf_name.strip() for pdf_name in pdf_name]
 # print(pdf_names)
 if all(pdf_url):
      pdf_urls = ['http://www.jkl.com.cn'+pdf_url for pdf_url in pdf_url]
      # print(pdf_url)
      pdf_data=dict(zip(pdf_names,pdf_urls))  # pdf地址和名字整合为字典
      for pdfName,pdfUrl in pdf_data.items():
        pdfName =pdfName.replace('/','.')
        res_pdf= requests.get(url =pdfUrl,headers=heade).content
        houZui = pdfUrl.split('.')[-1]
        pdf_pash = path + '/' + pdfName + '.'+ houZui  # 
        # print(pdf_pash)
        with open(pdf_pash,'wb') as f:
          f.write(res_pdf)
          print(pdfName,'下载成功')

到此这篇关于python爬虫智能翻页批量下载文件的实例详解的文章就介绍到这了,更多相关python爬虫实战之智能翻页批量下载文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
Python中几个比较常见的名词解释
Jul 04 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
python中删除某个元素的方法解析
Nov 05 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Python自动化操作实现图例绘制
Jul 09 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 #Python
python3.9.1环境安装的方法(图文)
Feb 02 #Python
M1芯片安装python3.9.1的实现
Feb 02 #Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 #Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 #Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 #Python
手把手教你配置JupyterLab 环境的实现
Feb 02 #Python
You might like
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
修改发贴的编辑功能
2007/03/07 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python2.x与Python3.x的区别
2016/01/14 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
python导入坐标点的具体操作
2019/05/10 Python
python数据化运营的重要意义
2019/11/25 Python
学习Python列表的基础知识汇总
2020/03/10 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Python类成员继承重写的实现
2020/09/16 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
综合实践活动方案
2014/02/14 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
作风转变心得体会
2014/09/02 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
企业年会祝酒词
2015/08/11 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
靠谱的活动总结
2019/04/16 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
python scrapy简单模拟登录的代码分析
2021/07/21 Python
Golang数据类型和相互转换
2022/04/12 Golang
Go语言grpc和protobuf
2022/04/13 Golang
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python