Python 通过requests实现腾讯新闻抓取爬虫的方法


Posted in Python onFebruary 22, 2019

最近也是学习了一些爬虫方面的知识。以我自己的理解,通常我们用浏览器查看网页时,是通过浏览器向服务器发送请求,然后服务器响应以后返回一些代码数据,再经过浏览器解析后呈现出来。而爬虫则是通过程序向服务器发送请求,并且将服务器返回的信息,通过一些处理后,就能得到我们想要的数据了。

以下是前段时间我用python写的一个爬取TX新闻标题及其网址的一个简单爬虫:

首先需要用到python中requests(方便全面的http请求库)和 BeautifulSoup(html解析库)。

通过pip来安装这两个库,命令分别是:pip install requests 和 pip install bs4 (如下图)

Python 通过requests实现腾讯新闻抓取爬虫的方法

先放上完整的代码

# 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)

首先引入上述两个库

import requests
from bs4 import BeautifulSoup

然后get请求腾讯新闻网url,返回的字符串实质上就是我们手动打开这个网站,然后查看网页源代码所看到的html代码。

wbdata = requests.get(url).text

我们需要的仅仅是某些特定标签里的内容:

Python 通过requests实现腾讯新闻抓取爬虫的方法

Python 通过requests实现腾讯新闻抓取爬虫的方法

可以看出,每条新闻链接、标题都在<div class="text">标签的<em class="f14 124">标签下

之后我们将刚刚请求得到的html代码进行处理,这时候就需要用到BeautifulSoap库了

soup = BeautifulSoup(wbdata,'lxml')

这一行的意思是对获取的信息进行解析处理,也可以将lxml库换成html.parser库,效果是相同的

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

这一行是利用刚刚经过解析获取的soup对象,选择我们需要的标签,返回值是一个列表。列表中存放了我们需要的所有标签内容。也可以使用BeautifulSoup中的find()方法或findall()方法来对标签进行选择。

最后用 for in 对列表进行遍历,分别取出标签中的内容(新闻标题)和标签中href的值(新闻网址),存放在data字典中

for n in news_titles:
  title = n.get_text()
  link = n.get("href")
  data = {
    '标题':title,
    '链接':link
  }

data存放的就是所有的新闻标题和链接了,下图是部分结果

Python 通过requests实现腾讯新闻抓取爬虫的方法

这样一个爬虫就完成了,当然这只是一个最简单的爬虫。深入爬虫的话还有许多模拟浏览器行为、安全问题、效率优化、多线程等等需要考虑,不得不说爬虫是一个很深的坑。

python中爬虫可以通过各种库或者框架来完成,requests只是比较常用的一种而已。其他语言中也会有许多爬虫方面的库,例如php可以使用curl库。爬虫的原理都是一样的,只是用不同语言、不同库来实现的方法不一样。

以上这篇Python 通过requests实现腾讯新闻抓取爬虫的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
聊聊Python中的pypy
Jan 12 Python
用Eclipse写python程序
Feb 10 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
Python读取二进制文件代码方法解析
Jun 22 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
python tkinter Entry控件的焦点移动操作
May 22 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 #Python
浅谈python3.6的tkinter运行问题
Feb 22 #Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 #Python
在Python运行时动态查看进程内部信息的方法
Feb 22 #Python
Python开启线程,在函数中开线程的实例
Feb 22 #Python
python 多线程串行和并行的实例
Feb 22 #Python
Python OOP类中的几种函数或方法总结
Feb 22 #Python
You might like
玛琪朵 Macchiato
2021/03/03 咖啡文化
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
简单实现python收发邮件功能
2018/01/05 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python动态进度条的实现代码
2019/07/03 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
中学生个人自我评价
2014/02/06 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
创建青年文明号材料
2014/05/09 职场文书
大学生毕业评语
2014/12/31 职场文书
老龙头导游词
2015/02/11 职场文书
英语演讲开场白
2015/05/29 职场文书
高中团支书竞选稿
2015/11/21 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle