#爬取豆瓣电影top250
文章目录
- 1 创建jupyter环境及安装相关的包
- 1.1 安装jupyter
- 1.2安装requests和lxml
- 2 分析网页链接
- 3 爬取网页
- 3.1 请求源代码
- 3.2 设置浏览器代理
- 3.3请求网页代码汇总
- 4 获取内容
- 4.1 获取xpath路径方法
- 4.2利用包lxml解析网页
- 4.3xpath获取
- 4.3.1电影名称的获取
- 5 用正则表达式匹配内容
- 5.1 用正则表达式将星级匹配出来
- 5.2 用正则表达式将评价人数匹配出来
- 6 将内容写入csv文件
- 7 爬取豆瓣电影top250代码汇总及爬取结果
1 创建jupyter环境及安装相关的包
1.1 安装jupyter
1.2安装requests和lxml
requests:请求网页时需要导入的包
lxml:对网页解析和过滤时需导入的包
2 分析网页链接
分析网页有助于我们爬取网页,可以减少代码冗余先分析每一页网页的URL
分析网页链接后会发现红框中的规律,网页每次跳转时是以25的间隔跳转,就可以用for循环来表示网页跳转的规律
知道网页的跳转规律后可用URL表示豆瓣TOP250网页的一般表达式
url='https://movie.douban.com/top250?start=%s&filter='%page
运用for循环表达出每个网页的URL
for page in range(0, 226, 25):url='https://movie.douban.com/top250?start=%s&filter='%page
3 爬取网页
3.1 请求源代码
以请求第一页网页为例,对此网页进行元素检查,先点击network,再点击all,即可看到网页请求方法为get .
开始导入包requests,请求源代码 https://movie.douban.com/top250?start=0&filter= ,向服务器发出请求,运行后得到200即为成功
import requests
test_url='https://movie.douban.com/top250?start=0&filter='
requests.get(url=test_url)
运行得到418,即网站已经意识到这是一个爬虫程序,触动了它的反爬虫程序
3.2 设置浏览器代理
请求源代码不成功,就要设置一个浏览器代理,告诉它这是浏览器在运行,才可以爬取网页
在检查元素中找到浏览器代理 ,红箭头所指就是网页的浏览器代理
接着伪装浏览器,构造一个字典
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'}
再重新请求源代码,即可成功
3.3请求网页代码汇总
import requests
test_url='https://movie.douban.com/top250?start=0&filter='
#设置浏览器代理,构造一个字典
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'}
response=requests.get(url=test_url, headers=headers).text
请求源代码结果图:
4 获取内容
4.1 获取xpath路径方法
将鼠标点击标有序号1的红箭头上所指的小箭头,选择所要获取的内容(如肖申克的救赎),即可看到标有序号3的红箭头所指的一条蓝色框,点击鼠标右键,选择copy,再选择copy xpath即可获取
当我们提取标签内的文本时,需要在复制到的xpath后面加上/text() ,告诉它说我需要提取的内容是一个标签呈现的数据
4.2利用包lxml解析网页
从lxml包中导入etree,对网页进行解析
from lxml import etree
#解析网页
html_etree=etree.HTML(response)
4.3xpath获取
xpath是按照HTML标签的方式进行定位的,谷歌浏览器自带有xpath, 直接复制来就可以使用,简单方便,运行速度快
分析每一部电影的xpath路径,就红框中的数字不一样,将数字删除后就可以表示电影的xpath路径
li=html_etree.xpath( '//*[@id="content"]/div/div[1]/ol/li')
4.3.1电影名称的获取
分析电影名称的xpath路径,只有红框中数字不同,红框前半截xpath路径与电影名称相同,可直接截取红框后半截xpath路径为电影名称xpath路径,当获取要获取所需电影时即可获取相应的电影名称
#电影名称name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
可用相同的方法获取电影排名,电影链接,电影星级,电影评分和评价人数
5 用正则表达式匹配内容
5.1 用正则表达式将星级匹配出来
正则表达式中可以使用 (.*? )来进行获取信息
import re
test="rating5-t"
re.findall('rating(.*?)-t',test)
将第一个网页的电影星级匹配出来后的内容:
提取出来后要星级进行区分,如红框所示,用正则表达式匹配出来,星级为4.5的会匹配出45
import refrom lxml import etree#解析网页
html_etree=etree.HTML(response)li=html_etree.xpath( '//*[@id="content"]/div/div[1]/ol/li')
for item in li:#等级rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]rating = re.findall('rating(.*?)-t', rating)[0]if len(rating) == 2:star = int(rating) / 10 #int()转化为数字else:star = ratingprint (star)
进行整理后,运行所得到的结果为:
5.2 用正则表达式将评价人数匹配出来
用第一个电影的评价人数作为例子
import re
test="1974974人评价"
re.findall('(.*?)人评价',test)
运行结果:
将第一个网页的评价人数匹配出来后的内容:
6 将内容写入csv文件
1.导入包csv
import csv
2.创建并打开文件夹
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入
3.写入内容
writer.writerow(('排名','名称', '链接', '星级', '评分', '评价人数'))
4.关闭文件
fp.close()
内容写入csv文件代码汇总:
import csv
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp)
writer.writerow(('排名','名称', '链接', '星级', '评分', '评价人数'))
fp.close()
7 爬取豆瓣电影top250代码汇总及爬取结果
代码汇总:
import re,csv,requests
from lxml import etree#设置浏览器代理,构造一个字典
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}#创建并打开文件夹
fp = open("./豆瓣250.csv",'a',encoding='utf-8-sig')
writer=csv.writer(fp)#写入内容
writer.writerow(('排名','名称','链接','星级','评分','评价人数'))#循环所有页面
for page in range(0, 226, 25):print("正在获取第%s页"%page)url='https://movie.douban.com/top250?start=%s&filter='%page#请求源代码,向服务器发出请求reponse=requests.get(url=url,headers=headers).text#解析网页 html_etree = etree.HTML (reponse)#过滤li=html_etree.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')for item in li:#电影排名rank=item.xpath('./div/div[1]/em/text()')[0] #电影名字 name=item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]#电影链接dy_url=item.xpath('./div/div[2]/div[1]/a/@href')[0] #电影星级数rating=item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0] rating=re.findall('rating(.*?)-t', rating)[0]if len(rating)==2: star = int(rating) / 10 #字符串不可做运算,故int()转化为整数型else:star=rating#电影分数rating_num=item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] #电影评价人数content=item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0] content=re.sub(r'\D',"", content) print(rank,name,dy_url,star,rating_num,content)writer.writerow((rank,name,dy_url,star,rating_num,content))
fp.close()
爬取结果:
#爬取豆瓣电影top250相关推荐
- python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250
用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...
- 案例:爬取豆瓣电影Top250中的电影信息
案例:爬取豆瓣电影Top250中的电影信息 豆瓣电影Top250首页 分析请求地址 在豆瓣电影Top250首页的底部可以确定电影信息一共有10页内容,每页25个电影信息,如下图: 切换页面,可以看到浏 ...
- 利用python爬取豆瓣电影top250
利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...
- Python爬虫 爬取豆瓣电影TOP250
Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...
- python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250
今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...
- 爬取豆瓣电影Top250影片信息
爬取豆瓣电影Top250影片信息 查看影片的详细信息 爬取过程 需安装的包 确定爬取地址 发送请求头 解析数据 保存数据 完整代码 查看影片的详细信息 进入豆瓣电影Top250,选择某一影片,右击,选 ...
- Python爬取豆瓣电影top250的电影信息
Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...
- 03_使用scrapy框架爬取豆瓣电影TOP250
前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...
- jsoup爬取豆瓣电影top250
文章目录 0.准备工作 1. 分析 2. 构思 3. 编程 3.1 定义一个bean,用于保存电影的数据 3.2 按照之前的构思进行编程 4.效果图 5.获取资源 5.1GitHub 5.2百度云 0 ...
- 爬虫入门经典(四) | 如何爬取豆瓣电影Top250
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...
最新文章
- Oracle执行计划相关(待补充)
- Android 调试 Release 包(debuggable)
- 9.VMware View 4.6安装与部署-connection server(View Replica Server)
- 在word中的公式以代码形式体现在web上的方法
- c语言试卷浙江理工大学杀人案件追踪,浙江理工大学c语言期末考试模拟试卷6 .pdf...
- linux nand 坏块_NAND Flash的坏块管理设计
- Bailian4101 晶矿的个数【DFS】
- Keras中文文档总结
- font标签的size属性
- cs6制作拼图游戏 dreamweaver_如何使用Dreamweaver cs6设计拼图游戏?
- mysql日期转为周数
- 测试工程师如何提升自己
- 一个月黑风高的夜晚紧急完成gitlab服务器数据迁移
- 20230106 作业
- 树莓派(二) adb命令控制手机拨打/接听电话
- 人工智能发展如何,未来有哪些就业方向?
- QT Widget.cpp重新命名、报错“xxxx“ was not declared in this scope
- 【Linux】解压缩文件(一)
- 基础(待续)-弹群协同作战
- 单周期CPU,多周期CPU
热门文章
- linux上安装java失败,Linux下安装jdk失败怎么办
- 1、fluentd安装
- Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection brok
- 病毒感染高峰期错过考研怎么办?社科院与杜兰金融管理硕士项目是你强大的后盾
- 因式分解,输出素数因子及其指数
- 大数据技术-Kerberos学习笔记
- TXD,RXD的意思
- ffmpeg-python库的使用翻译(三)
- uniapp 微信分享(安卓)
- IOS —— Crash分析