1. 基于百度新闻爬取对应关键字的新闻标题
代码:
import re # re模块主要是通过正则表达式的匹配,从网页中提取想要的信息
import requests # 从指定的网页上爬取数据
from urllib.parse import quote #导入quote方法对URL中的字符进行编码
class BaiduNewsCrawler: #定义BaiduNewsCrawler类
headersParameters = { #发送HTTP请求时的HEAD信息
'Connection': 'Keep-Alive',
'Accept': 'text/html, application/xhtml+xml,*/*',
'Accept-Language':
'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
'Accept-Encoding': 'gzip, deflate',
'User-Agent':
'Mozilla/6.1 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
}
''' ----------------------------注释-------------------------------------------
headersParameters中保存了请求头的信息,如:
headersParameters = { #发送HTTP请求时的HEAD信息
'Connection': 'Keep-Alive',
# Connection决定当前的事务完成后,是否会关闭网络连接。如果该值是“Keep-Alive”,网络连接就是持久
'Accept': 'text/html, application/xhtml+xml, */*',
#浏览器接收的媒体类型,text/html代表HTML格式,application/xhtml+xml代表XHTML格式,*/* 代表浏览器可以处理所有类型
'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
#浏览器申明自己接收的语言
'Accept-Encoding': 'gzip, deflate',
#浏览器申明自己接收的编码方式:通常指定压缩、是否支持压缩、支持什么方式压缩(gzip/default)
'User-Agent': 'Mozilla/6.1 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
#告诉HTTP服务器客户端浏览器使用的操作系统和浏览器的版本和名称
}
----------------------------注释-------------------------------------------
'''
def __init__(self, keyword, timeout): #定义构造方法
self.url='http://news.baidu.com/ns?word='+ quote(keyword) + '&tn=news&from=news&cl=2&rn=20&ct=1' #要爬取的新闻网址,keyword:搜索的关键词,百度新闻固定的搜索关键字地址
self.timeout=timeout #连接超时时间设置(单位:秒)
def GetHtml(self): #定义GetHtml方法
request=requests.get(self.url, timeout=self.timeout,
headers=self.headersParameters) #根据指定网址爬取网页
request.encoding = 'utf-8'
self.html=request.text #获取新闻网页内容
def GetTitles(self): #定义GetTitles方法
self.titles = re.findall(r'
([\s\S]*?)
',self.html) #匹配新闻标题,返回的是列表for i in range(len(self.titles)): #对于每一个标题
self.titles[i]=re.sub(r']+>','',self.titles[i]) #去除所有HTML标记,即<...>
self.titles[i]=self.titles[i].str