python爬虫之爬取腾讯新闻

news/2024/12/22 15:12:42/

原文链接:http://www.nicemxp.com/articles/11

本文目的抓取腾讯新闻首页中要闻页签下的所有新闻标题和链接。

如图:

地址:http://news.qq.com/top_index.shtml

要闻页签中一般会有几个分页:

所以要爬取要闻下的所有新闻标题和链接就需要一个一个分页的爬取。下面开始写代码。

首先获取腾讯新闻页面内容,写一个获取页面的接口。

先导入本次抓取所必备的库

 

# -*- coding:utf-8 -*-#Python抓取网页必备的库
import urllib 
import urllib2
#正则表达式
import re
#随机数生成
import random
#gzip
import gzip
from StringIO import StringIO

构建请求头部,请求页面

 

#构建页面请求的头部
headers = {'User-Agent':user_agent, "Referer":referer}
#构建页面请求
request = urllib2.Request(url, headers=headers)
#请求目的页面,设置超时时间为45秒
response =  urllib2.urlopen(request, timeout = 45)

请求腾讯新闻页面,返回的页面数据有时会经过gzip压缩,如果直接读取会出现二进制码,所以在处理返回的页面时需要做gizp解压的处理

 

 

#如果经过gzip压缩则先解压,否则直接读取
if response.info().get('Content-Encoding') == 'gzip':buf = StringIO(response.read())f = gzip.GzipFile(fileobj=buf)html = f.read()
else:html = response.read()

 

整理代码段,最后封装成页面请求接口

 

#user-agent
user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"#抓取页面接口,参数为地址和referer
def getHtml(url, referer = None):try:#构建页面请求的头部headers = {'User-Agent':user_agent, "Referer":referer}#构建页面请求request = urllib2.Request(url, headers=headers)#请求目的页面,设置超时时间为45秒response =  urllib2.urlopen(request, timeout = 45)html = None#如果经过gzip压缩则先解压,否则直接读取if response.info().get('Content-Encoding') == 'gzip':buf = StringIO(response.read())f = gzip.GzipFile(fileobj=buf)html = f.read()else:html = response.read()return html#如果请求异常except urllib2.URLError, e:if hasattr(e, "code"):print e.codeelif hasattr(e, "reason"):print e.reasonreturn None#其他异常except Exception,e:return None

页面请求接口写好后,接下来分析如何要闻页签下的所有数据,要闻页签下有几个分页,当我们在请求分页时可以看出腾讯要闻分页的请求时通过ajax实现的,打开Google浏览器的network,可以看到请求分页时的信息。如图:

 


 

 

分析请求地址会发现,每一次的分页请求都是一个地址后面加上一个随机数,而地址中会有本次请求的索引。

这样我们就可以构建分页的请求地址,获取每个分页的信息。但是在这之前我们不清楚腾讯要闻中会有多少个分页。

分析腾讯新闻的页面,我们最后会发现首页中的一段js标出了腾讯要闻中有多少分页。

因此我们首先抓取腾讯新闻页面内容,获取到要闻有多少分页,在构建分页请求,最后取出页面信息中所有的新闻

标题和原文链接就好了。代码如下:

 

def tencentStart():#腾讯新闻地址INDEX_URL = 'http://news.qq.com/top_index.shtml#hotnews'#腾讯要闻请求地址SUB_URL = "http://news.qq.com/c/2013ywList_{0}.htm"#页面数获取正则PAGE_PATTERNS = 'getString.pageCount.*?=.*?(\d+);'#标题和链接获取正则NEWS_PATTERNS = '<em.*?<a.*?href="(.*?)".*?>(.*?)</a>.*?</em>'#头部信息相关TENCENT_REFER = "http://news.qq.com/"#获取腾讯新闻页面html = getHtml(INDEX_URL)#取得要闻页面总数pattern = re.compile(PAGE_PATTERNS, re.S)countRe = re.search(pattern, html)if html == None:print("未获取到页面")return Nonecount = 1if countRe != None:count = int(countRe.group(1))#构建分页地址,请求分页数据for index in range(count):realIndex = index + 1#构建地址url = SUB_URL.format(realIndex)+'?'+str(random.random())html = getHtml(url, TENCENT_REFER)if html == None:continue#编译标题和链接获取正则pattern = re.compile(NEWS_PATTERNS, re.S)#获取所有标题和链接Res = re.findall(pattern, html)if Res == None:continue#打印所有标题和链接for item in Res:print(item[0]+"\n")print(item[1]+"\n")if __name__ == '__main__':tencentStart()

 

最后运行脚本,可以看到打印出的腾讯要闻页签中的所有标题和链接

 


http://www.ppmy.cn/news/973771.html

相关文章

python爬虫新闻爬取

import requests from bs4 import BeautifulSoup import os import re import traceback from datetime import datetime headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36} #获取一个新…

pyhton爬虫实战-爬取新浪国内新闻

第一次实战爬虫&#xff0c;爬取了新浪国内的最新的首页新闻&#xff0c;附效果截图&#xff1a; 附代码&#xff1a; import requests from bs4 import BeautifulSoup import json import re from datetime import datetime import pandas import sqlite3 import osurl http…

Python爬虫实战 | 人民网爬虫 根据关键词筛选新闻文章

上一篇《人民日报》的爬虫文章发布之后&#xff0c;收到了很不错的反馈&#xff0c;文中的爬虫代码也确实帮助到了很多人&#xff0c;我很开心。 跟读者们交流过程中&#xff0c;我也发现了一些比较共性的需求&#xff0c;就是 根据关键词筛选 新闻文章。 最初我的想法是&…

python实战之网络爬虫(爬取网页新闻资讯列表)

关于大数据时代的数据挖掘 &#xff08;1&#xff09;为什么要进行数据挖掘&#xff1a;有价值的数据并不在本地存储&#xff0c;而是分布在广大的网路世界&#xff0c;我们需要将网络世界中的有价值数据挖掘出来供自己使用 &#xff08;2&#xff09;非结构化数据&#xff1…

Python爬虫——爬取某网站新闻

文章目录 前言一、基本目标二、使用步骤整体代码 结果总结 前言 &#x1f649;随机找了个网站爬爬&#xff0c;我们的目标是 1.利用爬虫的re、xpath等知识&#xff0c;爬取到这个官网上的新闻&#xff0c;内容有&#xff1a;新闻标题, 发布时间, 新闻链接, 阅读次数, 新闻来源…

Python - 通过requests实现腾讯新闻抓取爬虫

最近也是学习了一些爬虫方面的知识。以我自己的理解&#xff0c;通常我们用浏览器查看网页时&#xff0c;是通过浏览器向服务器发送请求&#xff0c;然后服务器响应以后返回一些代码数据&#xff0c;再经过浏览器解析后呈现出来。而爬虫则是通过程序向服务器发送请求&#xff0…

Python爬虫爬取新浪新闻内容

首先感谢丘祐玮老师在网易云课堂的Python网络爬虫实战课程,接下来也都是根据课程内容而写.一来算是自己的学习笔记&#xff0c;二来分享给大家参考之用。 课程视频大概是在16年11月录制的&#xff0c;现在是18年2月.其中有几处因网站更新升级产生的不同,小小修改后仍是爬虫学习…

SQL RIGHT JOIN 关键字

在 SQL 中&#xff0c;RIGHT JOIN 是一种用于将两个或多个表中的记录组合在一起的 JOIN 操作类型。RIGHT JOIN 操作将返回右侧表中所有的行&#xff0c;并通过连接条件从左侧表中匹配相应的行。如果左侧表中没有匹配的行&#xff0c;则会在结果集中填充 NULL 值。因此&#xff…