|
知识要点还是之前的方法:
1. .*? 匹配全部内容的正则
2. selenium中元素定位方法 find_element_by_xpath 绝对路径的获取方法
3. 字符串内容拼接方法 .join()
实现步骤:
1.打开Chrome浏览器,并访问被测地址
2.自动翻页获取网页源码
3.循环遍历每页包含关键字【理财】的标题title
4.正则表达式区标题内容,并对数据进行清洗
案例背景页面:

详细代码实现如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : Newsjuchao.py # @Author: Wang jianhua # @Date : 2020/10/19 # @Desc : 批量下载巨潮资讯网-包含关键字【理财】的新闻标题 #@Contact : wjhwang@126.com #@Software : PyCharm
from selenium import webdriver import re import time browser = webdriver.Chrome() browser.maximize_window() #浏览器最大化 url = 'http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=理财' #被测地址 browser.get(url) time.sleep(3) data = browser.page_source p_count = '<span class="total-box" style="">约(.*?)条' count = re.findall(p_count, data)[0] # 获取公告个数 findall()方法返回的是列表哈 pages = int(int(count)/10)
# 1.自动翻页获取源代码 datas = [] datas.append(data) # 把第一页源代码先放到datas这个列表里 for i in range(10): # range(10)-表示获取1-11页的内容(注意下标的取值是前闭后开),想爬全部的话改成range(pages)100页 browser.find_element_by_xpath('//*[@id="fulltext-search"]/div/div[1]/div[2]/div[4]/div[2]/div/button[2]').click() time.sleep(2) data = browser.page_source datas.append(data) time.sleep(1) alldata = "".join(datas) browser.quit()
# 2.编写正则表达式 p_title = '<span title="" class="r-title">(.*?)</span>' p_href = '<a target="_blank" href="(.*?)data-id=' p_date = '<span class="time">(.*?)</span>' title = re.findall(p_title, alldata) href = re.findall(p_href, alldata) date = re.findall(p_date, alldata, re.S)
# 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].strip() date[i] = date[i].split(' ')[0] print(str(i + 1) + '.' + title[i] + ' - ' + date[i]) print(href[i]) 案例执行效果(100页的数据时):

数据清洗部分的写法和之前爬取百度和搜狗新闻网的写法是大致是相同的,可扩展成将数据存储到数据库中,然后将部分信息通过邮件的方式推荐给你的老板!然后大家对你刮目相看,可以参考我之前分享的案例!
谢谢,今天就到这里!您多指教! |