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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
跟老齐学Python之折腾一下目录
Oct 24 Python
详解Python中DOM方法的动态性
Apr 11 Python
python中字符串前面加r的作用
Jun 04 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
Python输入二维数组方法
Apr 13 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
python使用minimax算法实现五子棋
Jul 29 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
Python参数传递对象的引用原理解析
May 22 Python
如何通过python计算圆周率PI
Nov 11 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模板解析类实例
2015/07/09 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
javascript中的this详解
2014/12/08 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
vue axios用法教程详解
2017/07/23 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
Python中字符串的修改及传参详解
2016/11/30 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
小学教师培训感言
2014/02/11 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
PHP获取学生成绩的方法
2021/11/17 PHP