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 02 Python
python如何统计序列中元素
Jul 31 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
Python手动或自动协程操作方法解析
Jun 22 Python
详解Flask前后端分离项目案例
Jul 24 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
社区居务公开实施方案
2014/03/27 职场文书
驾驶员培训方案
2014/05/01 职场文书
鼓舞士气的口号
2014/06/16 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
求职自我评价范文
2015/03/09 职场文书
七年级英语教学反思
2016/02/15 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
入门学习Go的基本语法
2021/07/07 Golang
MySQL多表查询机制
2022/03/17 MySQL
Nginx 匹配方式
2022/05/15 Servers