《Python金融大数据挖掘与分析全流程详解》第10章 PDF文本解析 笔记整理

1、PDF批量下载

步骤:

(1)模拟搜索要下载的pdf关键词,得到下载页面的内容

(2)提取出标题、链接、日期;筛选出2018-2019年的

(3)访问下载链接,模拟点击下载按钮下载。这里要注意添加time.sleep()作为等待下载的时间

# =============================================================================
# 10.1 批量下载巨潮资讯网理财公告 by 王宇韬
# =============================================================================

from selenium import webdriver
import re
import time
browser = webdriver.Chrome()
#pdf下载链接
url = 'http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=理财'
browser.get(url)
time.sleep(3)
data = browser.page_source
p_count = 'id="page-info-title">合计约(.*?)条'
count = re.findall(p_count, data)[0]  # 获取公告个数,注意这里要加一个[0],因为findall返回的是一个列表
#计算翻页数,每页显示10条公告
pages = int(int(count)/10)

# 1.自动翻页获取源码源代码
datas = []
datas.append(data)  # 这边是把第一页源代码先放到datas这个列表里
for i in range(3):  # 这边为了演示改成了range(3),想爬全部的话改成range(pages)
    #巨潮资讯网翻页时网址不变化,所以要用Selenium库来模拟鼠标单击“下一页”按钮。
    browser.find_element_by_xpath('//*[@id="pagination_title"]/ul/li[12]').click()
    time.sleep(2)
    data = browser.page_source
    #每单击一次就获取一下该页的源代码
    datas.append(data)
    time.sleep(1)
    #把datas列表转换成字符串,进行正则表达式的操作
alldata = "".join(datas)
browser.quit()

# 2.编写正则表达式
#提取标题
p_title = '(.*?)'
#提取链接
p_href = '.*?'
#提取日期
p_date = '
(.*?)
' title = re.findall(p_title, alldata) href = re.findall(p_href, alldata) date = re.findall(p_date, alldata) # 3.清洗数据 for i in range(len(title)): title[i] = re.sub('<.*?>', '', title[i]) href[i] = 'http://www.cninfo.com.cn' + href[i] href[i] = re.sub('amp;', '', href[i]) date[i] = date[i].split(' ')[0] print(str(i + 1) + '.' + title[i] + ' - ' + date[i]) print(href[i]) # 4.自动筛选 for i in range(len(title)): if '2018' in date[i] or '2019' in date[i]: # 筛选2018和2019年的,可以自己调节 title[i] = title[i] href[i] = href[i] date[i] = date[i] #将不符合日期为2018年或2019年的内容处理为空字符串 else: title[i] = '' href[i] = '' date[i] = '' #用while循环遍历访问这些列表,一旦发现有某个元素是空字符串,就用列表的remove()函数把这个元素删除 while '' in title: title.remove('') while '' in href: href.remove('') while '' in date: date.remove('') # 5.自动批量爬取PDF - 选择默认储存位置 for i in range(len(href)): browser = webdriver.Chrome() browser.get(href[i]) try: #模拟点击网页上的下载按钮 browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/div[1]/div/a[4]').click() time.sleep(3) # 这个一定要加,因为下载需要一点时间 browser.quit() print(str(i+1) + '.' + title[i] + '是PDF文件') except: print(title[i] + '不是PDF文件') # 补充知识点1:无界面浏览器设置 # for i in range(len(href)): # chrome_options = webdriver.ChromeOptions() # chrome_options.add_argument('--headless') # browser = webdriver.Chrome(options=chrome_options) # browser.get(href[i]) # try: # browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/div[1]/div/a[4]').click() # time.sleep(3) # 这个一定要加,因为下载需要一点时间 # browser.quit() # print(str(i+1) + '.' + title[i] + '是PDF文件') # except: # print(title[i] + '不是PDF文件') # 补充知识点2:自动批量爬取PDF - 自己设定储存位置 # for i in range(len(href)): # chrome_options = webdriver.ChromeOptions() # prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\公告'} #这边你可以修改文件储存的位置 # chrome_options.add_experimental_option('prefs', prefs) # browser = webdriver.Chrome(chrome_options=chrome_options) # browser.get(href[i]) # try: # browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/div[1]/div/a[4]').click() # time.sleep(3) # 这个一定要加,因为下载需要一点时间 # print(str(i+1) + '.' + title[i] + '下载完毕') # browser.quit() # except: # print(title[i] + '不是PDF')

 

你可能感兴趣的:(爬虫,Python学习)