赞
踩
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
我们通过如下代码可以获取网页源代码,示例中代码是获取在百度新闻中搜索阿里巴巴的网页源代码。
- import requests
-
- headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
- 'AppleWebKit/537.36 (KHTML, like Gecko) '
- 'Chrome/77.0.3865.120 Safari/537.36'}
- res = requests.get(url, headers=headers)
- web_text = res.text
因为百度新闻网站只认可浏览器发送的请求,所以需要设置headers参数,以模拟浏览器的发送请求,chrome浏览器可以通过about:version获取。
通过观察网页源码,我们发现每条新闻的来源和发布日期都夹在<p class="c-author">和</p>之间,因此,可以通过正则表达式获取中间的来源和日期信息。
- pattern = '<p class="c-author">(.*?)</p>'
- info = re.findall(pattern, web_text, re.S) # re.S用于考虑换行符,因为.和*不包含换行符
- print(info)
获取的信息中包含了很多诸如空格、换行符、制表符以及<img>标签的内容,需要对数据进行二次清洗,这部分内容将在后面章节介绍到。
为了提取新闻网址和标题,需要像上节那样从网页源码中发现规律,通过获取的源码,我们发现,新闻地址前面都有<h3 class="c-title">。
通过如下两段代码,可以分别获取新闻的网址和标题。
- pattern_herf = '<h3 class="c-title">.*?<a href="(.*?)"'
- herf = re.findall(pattern_herf, web_text, re.S)
- print(herf)
-
- pattern_title = '<h3 class="c-title">.*?>(.*?)</a>'
- title = re.findall(pattern_title, web_text, re.S)
- print(title)
获取的数据同样需要进行二次数据清洗。
新闻标题清洗
提取的新闻标题数据存在两个问题:一是每个标题的收尾含有换行符和一些空格;二是中间含有<em>和</em>等无效字符。
(1)通过stip()函数把不需要的空格和换行符去掉。
- for i in range(len(title)):
- title[i] = title[i].strip()
2)用sub()函数处理<em>和</em>
for i in range
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。