目录
3.1 提取百度新闻标题、网址、日期及来源
3.1.1 打开百度新闻中搜索“阿里巴巴”
获取网页源代码的代码如下:
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 QIHU 360EE'}
url = 'https://www.baidu.com/s?tn=news&rtt=1&bsst=1&cl=2&wd=阿里巴巴' # 把链接中rtt参数换成4即是按时间排序,默认为1按焦点排序,前面基础部分也有讲到
res = requests.get(url, headers=headers).text # 加上headers用来告诉网站这是通过一个浏览器进行的访问
print(res)
【注】如何获得浏览器的headers,以我的360极速浏览器为例:
headers其实就是一个字典,它的第一个元素的键名为'User-Agent',冒号后面就是它的值,Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 QIHU 360EE。User-Agent实际代表访问网站的浏览器是哪种浏览器。
运行如下:
3.1.2 编写正则表达式提取新闻信息
(1)提取新闻的来源
观察源代码,发现可以用<span class="c-color-gray c-font-normal c-gap-right">和</span>作为文本A和文本B,提取中间的来源和日期信息
import re
p_info = '<span class="c-color-gray c-font-normal c-gap-right">(.*?)</span'
info = re.findall(p_info, res, re.S)
print(info)
运行结果及完整代码如下:
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 QIHU 360EE'}
url = 'https://www.baidu.com/s?tn=news&rtt=1&bsst=1&cl=2&wd=阿里巴巴' # 把链接中rtt参数换成4即是按时间排序,默认为1按焦点排序,3.4.1小节也有讲到
res = requests.get(url, headers=headers).text # 加上headers用来告诉网站这是通过一个浏览器进行的访问
import re
p_info = '<span class="c-color-gray c-font-normal c-gap-right">(.*?)</span'
info = re.findall(p_info, res, re.S)
print(info)
(2)提取新闻的网址和标题
观察源代码,网址和标题都可以用正则表达式取出
p_href = '<h3 class="news-title_1YtI1">.*?<a href="(.*?)"'
href = re.findall(p_href,res,re.S)
print(href)
p_title ='<h3 class="news-title_1YtI1">.*?>(.*?)</a>'
title = re.findall(p_title,res,re.S)
print(title)
通过print(href)和print(title)将两个列表打印出来,运行结果如下:
可见,提取出的网址和标题并不完善,标题中含有<em>和</em>等无效字符,后续将对数据进行清洗。