博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫---requests库+xpath爬取和保存豆瓣电影top250电影数据,一看就会
阅读量:4164 次
发布时间:2019-05-26

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

前言

爬虫实例二:requests库+xpath爬取和保存豆瓣电影top250电影数据

一、网页分析及流程框架

在这里插入图片描述在这里插入图片描述

1、抓取单页内容
利用requests请求目标站点,得到单个网页HTML代码,返回结果
2、数据解析(xpath)
利用xpth解析HTML代码得到电影的名称、主演、评分、评论、简介等。
3、保存至文件
利用CSV将爬取到的内容保存下来
4、开启循环
对多页内容遍历,抓取所有页面的信息

二、爬虫步骤

1.引入库

import requestsfrom requests.exceptions import RequestExceptionimport parselimport csv

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。因为本次我们是用xpth解析,所以import parsel。

2.定义请求和解析函数

浏览器代理,代码请求地址数据(携带用户代理)将代码伪装成浏览器,这样才会给我们返回数据。

在这里插入图片描述
定义请求一个网页的requests。

def get_one_page(url):    try:        #分析网页、发送请求、浏览器代理        headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'} #代码请求地址数据(携带用户代理)将代码伪装成浏览器 response = requests.get(url,headers = headers) response.encoding = 'utf-8' if response.status_code == 200: return response.text return None except RequestException: return None

官方文档https://docs.python-requests.org/,可以去捕捉在网页请求时的异常;当然你也可以去定义其他的异常捕捉。

在这里插入图片描述
定义解析网页的函数:

def parsel_page(html):	#xpath解析数据 、将数据转换成一个对象    selector = parsel.Selector(html)    #如前面分析的一样,电影信息都在这个类ol[@class="grid_view"]中的/li标签里面    ls = selector.xpath('//ol[@class="grid_view"]/li')    ls_mov = [] #定义空列表来存储电影信息    for li in ls:        #电影名字        title = li.xpath('.//div[@class="hd"]/a/span[1]/text()').get()          #导演主演        dirs = li.xpath('.//div[@class="bd"]/p[1]/text()').get().strip()        #评分        star = li.xpath('.//div[@class="star"]/span[2]/text()').get().strip()        #评论人数        com = li.xpath('.//div[@class="star"]/span[4]/text()').get().strip()        #简介        quote = li.xpath('.//div[@class="bd"]/p[2]/span[1]/text()').get().strip()        ls_mov.append([title,dirs,star,com,quote])    return ls_mov

以电影名字为例;

电影肖申克的救赎是在第一个<li标签<div标签中的class="hd"类中的<a标签的第一个标签中。text()方法是获得标签中的文字。
在这里插入图片描述
我们再来分析一下评分;
评分同样是在div[@class=“star”]/span[2](div标签中的star类里面的第二个span标签)中;第四个span标签里则是评论人数。使用strip()方法可以去掉字符串前后的空格。
在这里插入图片描述

3.爬取单页电影信息

import requestsfrom requests.exceptions import RequestExceptionimport parseldef get_one_page(url):    try:        #分析网页、发送请求、浏览器代理        headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'} #代码请求地址数据(携带用户代理)将代码伪装成浏览器 response = requests.get(url,headers = headers) response.encoding = 'utf-8' if response.status_code == 200: return response.text return None except RequestException: return Nonedef parsel_page(html): selector = parsel.Selector(html) ls = selector.xpath('//ol[@class="grid_view"]/li') ls_mov = [] for li in ls: title = li.xpath('.//div[@class="hd"]/a/span[1]/text()').get() dirs = li.xpath('.//div[@class="bd"]/p[1]/text()').get().strip() star = li.xpath('.//div[@class="star"]/span[2]/text()').get().strip() com = li.xpath('.//div[@class="star"]/span[4]/text()').get().strip() quote = li.xpath('.//div[@class="bd"]/p[2]/span[1]/text()').get().strip() ls_mov.append([title,dirs,star,com,quote]) return ls_mov def main(): url = 'https://movie.douban.com/top250?' html = get_one_page(url) ls = parsel_page(html) print(ls) if __name__ == '__main__': main() print("successful")

在这里插入图片描述

4.循环爬取

url = 'https://movie.douban.com/top250?'##url1=https://movie.douban.com/top250?start=0&filter=url2=https://movie.douban.com/top250?start=25&filter=url3=https://movie.douban.com/top250?start=50&filter=url4=https://movie.douban.com/top250?start=75&filter=

所以只需要改变start的页码值就可以获得另一个页面的URL,而且值得改变是有规律的,每次增加25.

在这里插入图片描述
修改main()函数,进行循环爬取,并且保存。

def main():    for page in range(0,256,25):                url = 'https://movie.douban.com/top250?start={page}&filter='        html = get_one_page(url)        ls = parsel_page(html)        #保存数据        for item in ls:            with open ('movs.csv',mode='a',encoding='utf-8',newline='') as f:                csv_write = csv.writer(f)                csv_write.writerow(item)#分行写入

在代码保存的路径里生成一个CSV文件,可以用Excel打开;打开之后可以看到我们爬取到的数据。

在这里插入图片描述
在这里插入图片描述
完整代码:

import requestsfrom requests.exceptions import RequestExceptionimport parselimport csvdef get_one_page(url):    try:        #分析网页、发送请求、浏览器代理        headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'} #代码请求地址数据(携带用户代理)将代码伪装成浏览器 response = requests.get(url,headers = headers) response.encoding = 'utf-8' if response.status_code == 200: return response.text return None except RequestException: return None#解析网页def parsel_page(html): selector = parsel.Selector(html) ls = selector.xpath('//ol[@class="grid_view"]/li') ls_mov = [] for li in ls: #电影名字 title = li.xpath('.//div[@class="hd"]/a/span[1]/text()').get() #导演主演 dirs = li.xpath('.//div[@class="bd"]/p[1]/text()').get().strip() #评分 star = li.xpath('.//div[@class="star"]/span[2]/text()').get().strip() #评论 com = li.xpath('.//div[@class="star"]/span[4]/text()').get().strip() #简介 quote = li.xpath('.//div[@class="bd"]/p[2]/span[1]/text()').get().strip() ls_mov.append([title,dirs,star,com,quote]) return ls_mov def main(): for page in range(0,256,25): url = 'https://movie.douban.com/top250?start={page}&filter=' html = get_one_page(url) ls = parsel_page(html) #print(parsel_page(html)) #保存数据 for item in ls: with open ('movs.csv',mode='a',encoding='utf-8',newline='') as f: csv_write = csv.writer(f) csv_write.writerow(item) if __name__ == '__main__': main()

总结

当然我们也可以用代码打开,这样就可以用来进行数据分析了。大家可以试试用我前面文章的pyecharts库,来进行一次数据分析。

在这里插入图片描述

转载地址:http://uqoxi.baihongyu.com/

你可能感兴趣的文章
HTML5学习之——HTML 5 Canvas vs. SVG
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 Web Workers
查看>>
HTML5学习之——HTML 5 Canvas
查看>>
HTML5学习之——HTML5 内联 SVG
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 形状学习之——SVG圆形
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>