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编写生成验证码的脚本的教程
May 04 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
Python列表推导式与生成器用法分析
Aug 02 Python
Python实现Dijkstra算法
Oct 17 Python
Python实现分段线性插值
Dec 17 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
IE与FireFox中的childNodes区别
2011/10/20 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
详解redux异步操作实践
2018/08/15 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
python读取excel表格生成erlang数据
2017/08/26 Python
python 美化输出信息的实例
2018/10/15 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
详解Flask前后端分离项目案例
2020/07/24 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
sort命令的作用和用法
2013/08/25 面试题
高中生家长会演讲稿
2014/01/14 职场文书
优秀公益广告词大全
2014/03/19 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
工人先锋号申报材料
2014/12/29 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
python基础之类方法和静态方法
2021/10/24 Python
浅析python中特殊文件和特殊函数
2022/02/24 Python