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 查找文件夹下所有文件 实现代码
Jul 01 Python
python中base64加密解密方法实例分析
May 16 Python
python类装饰器用法实例
Jun 04 Python
彻底搞懂Python字符编码
Jan 23 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
Django配置文件代码说明
Dec 04 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
基于 Python 实践感知器分类算法
Jan 07 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输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP文件操作详解
2016/12/30 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
广告显示判断
2006/08/31 Javascript
多个iframe自动调整大小的问题
2006/09/18 Javascript
Javascript模块模式分析
2008/05/16 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
实例解析angularjs的filter过滤器
2016/12/14 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
python实现八大排序算法(2)
2017/09/14 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
django使用多个数据库的方法实例
2021/03/04 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
九年级体育教学反思
2014/01/23 职场文书
共产党员承诺书
2014/03/25 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
城南旧事电影观后感
2015/06/16 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP