博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫练习——爬取腾讯新闻
阅读量:4129 次
发布时间:2019-05-25

本文共 1938 字,大约阅读时间需要 6 分钟。

1、寻找数据特征

腾讯新闻的网址URL为:

网页显示界面如下:

需要爬取这个页面每一条新闻的标题,鼠标右击一条新闻的标题,选择“审查元素”,下图的部分就是第一条新闻标题在HTML中的结构、位置和表现形式:

它上一级元素为:<em class="f14 l24">,再上一级元素为:<div class="text">我们再看另一条新闻的标题,发现它的结构和之前我们分析的新闻标题的结构是一样的:

通过这些信息,就可以确定新闻标题在HTML文档中的位置。接下来,开始使用Python对腾讯新闻标题进行爬取。

2、编写爬取代码

# coding:utf-8

# 引入相关模块
import requests
from bs4 import BeautifulSoup
url = "http://news.qq.com/"
# 请求腾讯新闻的URL,获取其text文本
wbdata = requests.get(url).text
# 对获取到的文本进行解析
soup = BeautifulSoup(wbdata,'lxml')
# 从解析文件中通过select选择器定位指定的元素,返回一个列表
news_titles = soup.select("div.text > em.f14 > a.linkto")
# 对返回的列表进行遍历
for n in news_titles:
    # 提取出标题和链接信息
    title = n.get_text()
    link = n.get("href")
    data = {
        '标题':title,
        '链接':link
    }

    print(data)

运行结果部分如下:

注:如果没有安装lxml库将无法正常运行,可能会出现Traceback (most recent call last):    File "C:\Users\ADMINI~1\AppData\Local\Temp....这样的错误,安装方法很简单,输入 pip install lxml即可。

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是  .

下表列出了lxml和Python内置的解析器,以及它们的优缺点:

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, "html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup, "lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库

3、代码分析

# coding:utf-8
首先,我们定义了文件的编码形式为UTF-8,以避免一些编码错误导致中文乱码。

import requests

from bs4 import BeautifulSoup

然后,我们引入了相关的模块,requests用于HTTP请求,BeautifulSoup用于解析HTML响应。

url = "http://news.qq.com/"

设置一个变量url,值为腾讯新闻的URL

wbdata = requests.get(url).text

使用requests.get()对URL发起GET方式的HTTP请求,并使用text()方法获取响应的文本内容,最后将其赋值给变量wbdata。

soup = BeautifulSoup(wbdata,'lxml')

使用BeautifulSoup对响应文本wbdata进行解析处理,这里使用的是lxml库,如何没有安装,可以使用Python自带的html.parser,效果也是一样的。

news_titles = soup.select("div.text > em.f14 > a.linkto")

在解析后的文本中,使用select选择器,在文本中选择指定的元素,通常我们还会使用find()和findall()方法来进行元素选择。这一步返回的为一个列表,列表内的元素为匹配的元素的HTML源码。

for n in news_titles:

# 提取出标题和链接信息
title = n.get_text()
link = n.get("href")
data = {'标题':title,'链接':link}
print(data)

对结果列表进行遍历,再从遍历的元素中提取出数据,get("href")表示获取属性名为“href”的属性值,get_text()表示获取标签的文本信息。

这样,一个简单的腾讯新闻爬虫就完成了。

你可能感兴趣的文章
Android基础:Android布局中gravity和layout_gravity的区别
查看>>
Android Studio Logcat的使用
查看>>
Android中级:recyclerView的使用
查看>>
Android Design:原生TabLayout+viewpaper+fragment实现滑动效果
查看>>
第三方开源库:SlidingMenu-Master实现侧拉效果
查看>>
Android基础:startActivityForResult+onActivityResult+setResult
查看>>
异常:The selected device is incompatible
查看>>
第三方SDK:RongCloud IMKit实现简单的单人会话
查看>>
Android基础:button imageview
查看>>
Android Studio:Android Studio安装Genymotion插件
查看>>
第三方SDK:讯飞语音听写
查看>>
第三方SDK:JPush SDK Eclipse
查看>>
第三方开源库:imageLoader的使用
查看>>
Andriod基础:RatingBar设置
查看>>
自定义控件:飞入飞出的效果
查看>>
自定义控件:动态获取控件的高
查看>>
第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高
查看>>
第三方SDK:百度地图SDK的使用
查看>>
Android studio_迁移Eclipse项目到Android studio
查看>>
JAVA:Date简介和格式化
查看>>