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用GET方法上传文件
Mar 10 Python
python正则表达式match和search用法实例
Mar 26 Python
整理Python最基本的操作字典的方法
Apr 24 Python
python 性能提升的几种方法
Jul 15 Python
如何将python中的List转化成dictionary
Aug 15 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
python 实现selenium断言和验证的方法
Feb 13 Python
pandas分区间,算频率的实例
Jul 04 Python
python中os包的用法
Jun 01 Python
基于Django集成CAS实现流程详解
Nov 28 Python
pytorch fine-tune 预训练的模型操作
Jun 03 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
php连接Access数据库错误及解决方法
2013/06/20 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
解决python线程卡死的问题
2019/02/18 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
C#和SQL Server的面试题
2016/08/12 面试题
2014年元旦活动方案
2014/02/15 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
公司离职证明标准格式
2014/11/18 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书