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 相关文章推荐
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
基于matplotlib xticks用法详解
Apr 16 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
python两个list[]相加的实现方法
Sep 23 Python
Matplotlib中rcParams使用方法
Jan 05 Python
python如何实现递归转非递归
Feb 25 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
python实现指定字符串补全空格的方法
2015/04/30 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
劳动实践课感言
2014/02/01 职场文书
新郎新娘致辞
2015/07/31 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
JavaScript原型链详解
2021/11/07 Javascript