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使用urllib2获取网络资源实例讲解
Dec 02 Python
python分析网页上所有超链接的方法
May 08 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Django如何使用jwt获取用户信息
Apr 21 Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
python 制作磁力搜索工具
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
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
pandas中ix的使用详细讲解
2020/03/09 Python
python中if及if-else如何使用
2020/06/02 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
学雷锋月活动总结
2014/04/25 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
专科生就业求职信
2014/06/22 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
污水处理保证书
2015/05/09 职场文书
《风筝》教学反思
2016/02/23 职场文书
python字典的元素访问实例详解
2021/07/21 Python
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏