实战第一篇:爬取腾讯新闻首页资讯标题
终于进入到我们的实战内容篇了,因为是第一篇,所以找一个简单的例子给大家介绍爬取的详细过程,这既是对基础篇知识的运用,也是增强大家往后学习的动力。
目标:爬取腾讯新闻首页资讯内容
1、分析站点,找规律
腾讯新闻的网址为:http://news.qq.com/ 我们打开网页看一看:
我们今天的任务是爬取首页每一条新闻的标题,先鼠标右击一条新闻的标题,选择出现的“检查”(我用的是chrome,其他浏览器可能是审查元素),出现下图的窗口:
图片中黄色框的位置就是那一条新闻标题在HTML中的结构位置:
<a target="_blank" class="linkto" href="http://news.qq.com/a/20180607/20180607A20YP5.htm">蔡英文亲信接受质询 一时紧张就暴露“卧底”身份</a>
它上一级元素为:<em class="f14 l24">,再上一级元素为:<div class="text">
我们再看另一条新闻的标题,发现它的结构和之前我们分析的新闻标题的结构是一样的:
<div class="text">
<em class="f14 l24">
<a target="_blank" class="linkto" href="http://news.qq.com/a/20180608/006430htm">特朗普称如会晤顺利可能邀请金正恩访美
</a>
</em>
</div>
有了这些信息,我们就可以确定新闻标题在HTML文档中的位置。 然后我们开始对腾讯新闻首页标题进行爬取。
2.写代码,开始爬取网页
我们先确定一下标题的详细位置,采用css selector来选取元素:
使用BeautifulSoup对响应文本wb_data进行解析处理,这里我个人比较喜欢使用是lxml库,如果没有安装,你可以使用Python自带的html.parser,其效果也是一样的。
对结果列表进行遍历的时候,先遍历,再从遍历的元素中提取出单个数据,get_text()表示获取标签的文本信息,get("href")表示获取属性名为“href”的属性值。
完整的代码如下:
import requests
from bs4 import BeautifulSoup
# 导入相关的模块
url = "http://news.qq.com/"
# 腾讯新闻的首页网址
web_data = requests.get(url) # 获取文本信息
soup = BeautifulSoup(web_data.text, "lxml") # 对获取到的文本信息进行解析
news = soup.select("a.linkto") # 从解析的文本中通过select选择器定位指定的元素,返回一个列表
for x in news: # 对返回的列表进行遍历
title = x.get_text() # 取出标题,采用get_text()方法
link = x.get("href") # 取出链接,采用get("href")方法
data = {
'标题': title,
'链接': link
}
print(data) # 输出文章标题
3、代码输出结果
怎么样?是不是觉得自己很厉害!给自己鼓个掌先,撒个花先!
总结一下:
本例采用requests+ Beautiful的形式对腾讯新闻首页资讯标题进行
了爬取,对于小白而言这是最容易懂的爬取例子。后面随着学习的
不断深入,我们会挑战一些更有趣的,更难的例子。对了,如果你对requests和BeautifulSoup不明白或是有很强的渴望,可以查看它们的官方文档:(我这里贴一下地址)
requests官方文档(中文): http://docs.python-requests.org/zh_CN/latest/
BeautifulSoup文档(中文): https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html