Selenium网络爬虫实战——以巨潮咨询网为例

Selenium库是一个自动化测试工具,能够驱动浏览器模拟人的操作,如鼠标单击、键盘输入等。通过Selenium库能够比较容易地获取到网页的源代码,还可以进行网络内容的批量下载。特别对于一些动态网页很实用。

本次内容以巨潮网为例,进行pdf文件的下载操作。

以Chrome浏览器为例,需要下载并安装模拟浏览器ChromeDriver,这部分也很重要,网上有教程可以学习。

第一步:打开网站

以中国银行的相关内容为例。

# 使用selenium进行爬虫
# 爬取巨潮咨询网上关于中国银行的相关材料
from selenium import webdriver
import time
import re
browser = webdriver.Chrome()
url = 'http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=中国银行'
browser.get(url)
time.sleep(10)

会自动打开一个网页:

 

 第二步:点击更多

 

这里需要用xpath

# 使用爬虫来点击“更多”按钮
browser.find_element_by_xpath('//*[@id="fulltext-search"]/div/div[1]/div[1]/div[1]/span/a').click()
data = browser.page_source

 之后页面发生跳转

 

 

第三步:查看共有多少页

 

 

p_count = '<ul class="el-pager"><li class="number active">.*?</li><!----><li class="number">.*?</li><li class="number">.*?</li><li class="number">.*?</li><li class="el-icon more btn-quicknext el-icon-more"></li><li class="number">(.*?)</li></ul>'
count = re.findall(p_count,data)
print("共有的页数为:")
print(count[0])

 结果:

 

 第四步:点击下一步获取数据

 

 

# 使用爬虫来点击“下一页”按钮
datas = []
datas.append(data)
for index in range(int(int(count[0])/10)):
    browser.find_element_by_xpath('//*[@id="main"]/div[3]/div/div[2]/div/div/div[2]/div[1]/div[3]/div/div/button[2]').click()
    time.sleep(3)
    data = browser.page_source
    datas.append(data)
    time.sleep(3)
alldata = ''.join(datas)

 页面会自动跳转。

第五步:提取关键信息

# 获取标题、网址、页数和时间信息数据
p_title = '<div class="cell"><a target="_blank" href=".*?" data-id=".*?" data-orgid=".*?" data-seccode=".*?" class="ahover"><span class="r-title">(.*?)</span> <span class="icon-f"><i class="iconfont iconnotice-PDF1"></i></span></a></div>'
p_href = '<div class="cell"><a target="_blank" href="(.*?)" data-id=".*?" data-orgid=".*?" data-seccode=".*?" class="ahover"><span class="r-title">.*?</span> <span class="icon-f"><i class="iconfont iconnotice-PDF1"></i></span></a></div>'
p_date = '<div class="cell"><a target="_blank" href=".*?&announcementTime=(.*?)" data-id=".*?" data-orgid=".*?" data-seccode=".*?" class="ahover"><span class="r-title">.*?</span> <span class="icon-f"><i class="iconfont iconnotice-PDF1"></i></span></a></div>'
title = re.findall(p_title,alldata)
href = re.findall(p_href,alldata)
date = re.findall(p_date,alldata)

 第六步:数据清洗

# 标题、网址、时间信息数据清洗
for index in range(len(title)):
    title[index] = title[index]
    href[index] = 'http://www.cninfo.com.cn' + href[index]
    href[index] = re.sub('amp;','',href[index])
    date[index] = date[index]
    print(str(index + 1) +  '.' + title[index] + ' - ' + date[index])
    print(href[index])

 

 第七步:下载文件

# 点击并下载文件
# 以第一个为例
browser.get(href[0])
time.sleep(10)
browser.find_element_by_xpath('//*[@id="noticeDetail"]/div/div[1]/div[3]/div[1]/button').click()

 

 

 下载好了。

 

posted on 2021-04-08 17:41  桌子哥  阅读(988)  评论(0编辑  收藏  举报