• 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()

     下载好了。

  • 相关阅读:
    BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组 + 贪心 + 细节
    BZOJ 1692: [Usaco2007 Dec]队列变换 后缀数组 + 贪心
    luogu P2852 [USACO06DEC]牛奶模式Milk Patterns 后缀数组 + Height数组 + 二分答案 + 扫描
    BZOJ2251 [2010Beijing Wc]外星联络 后缀数组 + Height数组
    [NOI2015]软件包管理器 树链剖分 + 线段树
    BZOJ [POI2004]PRZ 状压DP + 二进制 + 骚操作
    GIL与异步回调
    Event事件
    进程池与线程池
    队列
  • 原文地址:https://www.cnblogs.com/zhuozige/p/14633548.html
Copyright © 2020-2023  润新知