python 豆瓣爬虫,python爬虫爬取豆瓣电影top250
Python爬虫入门教学(一):爬豆瓣电影排名信息_mb628b309d85c3f的技术博客_博客
前言中的文字和图片均来自互联网,仅供学习交流,无商业用途。如有问题,请及时联系我们进行处理。
基础开发环境Python 3.6Pycharm相关模块使用requestsparselcsv安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。
爬行动物的基本概念
先明确爬豆瓣电影资讯前250的需求
电影导演姓名,主演年份,国家,类型分级,被评价人数。电影导论2。发送请求。Python中大量的开源模块使得编码变得非常简单。写爬虫时我们需要知道的第一个模块是请求。
请求url地址,使用get request,add headers请求头,模拟浏览器请求,网页会返回response对象给你。
#模拟浏览器发送请求
导入请求
URL= https://movie . douban . com/top 250
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/81 . 0 . 4044 . 138 Safari/537.36
}
response=requests.get(url=url,headers=headers)
打印(响应)
200是状态代码,表示请求成功。
2xx(成功)
3xx(重定向)
4xx(请求错误)
5xx(服务器错误)
公共状态代码
00-服务器成功返回网页,客户端请求成功。32-物体的暂时移动。目前,服务器响应来自不同位置的网页的请求,但是请求者应该继续使用原始位置用于将来的请求。34-属于重定向。自上次请求以来,请求的网页未被修改。当服务器返回此响应时,将不会返回网页内容。41-未经授权。请求认证。对于需要登录的网页,服务器可能会返回这个响应。44-未找到。服务器找不到请求的网页。53(服务不可用)服务器当前不可用(由于过载或停机维护)。通常,这只是一种暂时的状态。三。获取数据导入请求
URL= https://movie . douban . com/top 250
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/81 . 0 . 4044 . 138 Safari/537.36
}
response=requests.get(url=url,headers=headers)
打印(响应.文本)
Requests.get (URL=URL,headers=headers)请求页面返回响应对象。
Response.text:获取网页的文本数据。
Response.json:获取网页的json数据。
这两个是用的最多的,当然还有其他的。
四。分析数据分析数据的常用方法:正则表达式、css选择器、xpath、lxml…
常见解析模块:bs4、parsel…
我们用的是帕塞尔。无论是上一篇文章,还是后续的爬虫系列,我都会用parsel,解析库。没有它,我觉得比bs4好闻。
Parsel是第三方模块。可以安装pip安装parsel。
Parsel可以使用css、xpath和re解析方法。
所有电影信息都包含在li标签中。
#将response.text文本数据转换为选择器对象
选择器=parsel。选择器(响应.文本)
#获取所有李标签
lis=selector.css(。grid _ view Li’)
#遍历每个li标签的内容。
李斯对李说:
#获取电影片头hd class属性下A标签下第一个span标签中的文本数据。Get()输出形式是string get a getall()输出形式是list get all。
Title=li.css(。HD a span:n-child(1):text )。Get () # get()以字符串形式输出
Movie _ list=li.css(。BD p:n-child(1):text )。getall () # getall()输出表单是一个列表
star=movie_list[0]。剥离()。替换( \xa0\xa0\xa0 , )。替换(/. ), )
电影信息=电影列表[1]。剥离()。split (\ xa0/\ xa0) # [1994 ,美国,犯罪情节]
电影时间=电影信息[0] #电影上映时间
电影_国家=电影_信息[1] #哪个国家的电影
电影类型=电影信息[2] #什么样的电影
Rating _ num=li.css(。rating _ num:text’)。获取()#电影分级
People=li.css(。star span:n-child(4):text )。Get () #被评估的人数
Summary=li.css(。inq:text’)。Get () #一句话的总结
dit={
电影名称:标题,
参与者,明星,
发布时间:电影时间,
拍摄国家:电影_国家,
电影类型:电影类型,
电影分级,分级数量,
评估号,人员,
电影概述,摘要,
}
# pprint打印格式模块
pprint.pprint(dit)
以上知识点都用上了。
循环css选择器字典创建列表值字符串方法Parsel解析模块方法:划分替换pprint打印格式模块,所以需要有扎实的基础。否则,你甚至不会知道为什么要这样写代码。
动词(verb的缩写)保存数据(数据持久性)用open保存数据的常用方法
豆瓣电影信息之类的数据用Excel保存会更好。
所以需要使用csv模块。
# csv模块将数据保存到Excel
F=打开(‘豆瓣电影数据。 CSV ,模式= a ,编码= UTF-8 ,换行= )
Csv _ writer=csv.dictwriter (f,字段名=[电影名称,参与者,上映时间,拍摄国家,电影流派,
电影分级,评价人数,电影概述])
Csv_writer.writeheader() #写入标头
这是为了抓取数据并保存在本地。这只是一页数据,爬取数据绝对不止爬取一页数据。要实现多页面数据抓取,需要分析网页数据url地址的变化规律。
可以清楚的看到,每个页面的url地址增加了25,利用for循环实现了翻页操作。
对于范围(0,251,25)内的页面:
URL=f https://movie . douban . com/top 250?Start={page} filter=完整的实现代码
导入pprint
导入请求
导入parsel
导入csv
1、明确需求:
爬豆瓣Top250排名电影资讯
电影名称
导演,主演
年份、国家、类型
对人数进行评分和评估
电影简介
# csv模块将数据保存到Excel
F=打开(‘豆瓣电影数据。 CSV ,模式= a ,编码= UTF-8 ,换行= )
Csv _ writer=csv.dictwriter (f,字段名=[电影名称,参与者,上映时间,拍摄国家,电影流派,
电影分级,评价人数,电影概述])
Csv_writer.writeheader() #写入标头
#模拟浏览器发送请求
对于范围(0,251,25)内的页面:
URL=f https://movie . douban . com/top 250?start={page} filter=
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/81 . 0 . 4044 . 138 Safari/537.36
}
response=requests.get(url=url,headers=headers)
#将response.text文本数据转换为选择器对象
选择器=parsel。选择器(响应.文本)
#获取所有李标签
lis=selector.css(。grid _ view Li’)
#遍历每个li标签的内容。
李斯对李说:
#获取电影片头hd class属性下A标签下第一个span标签中的文本数据。Get()输出形式是string get a getall()输出形式是list get all。
Title=li.css(。HD a span:n-child(1):text )。Get () # get()以字符串形式输出
Movie _ list=li.css(。BD p:n-child(1):text )。getall () # getall()输出表单是一个列表
star=movie_list[0]。剥离()。替换( \xa0\xa0\xa0 , )。替换(/. ), )
电影信息=电影列表[1]。剥离()。split (\ xa0/\ xa0) # [1994 ,美国,犯罪情节]
电影时间=电影信息[0] #电影上映时间
电影_国家=电影_信息[1] #哪个国家的电影
电影类型=电影信息[2] #什么样的电影
Rating _ num=li.css(。rating _ num:text’)。获取()#电影分级
People=li.css(。star span:n-child(4):text )。Get () #被评估的人数
Summary=li.css(。inq:text’)。Get () #一句话的总结
dit={
电影名称:标题,
参与者,明星,
发布时间:电影时间,
拍摄国家:电影_国家,
电影类型:电影类型,
电影分级,分级数量,
评估号,人员,
电影概述,摘要,
}
pprint.pprint(dit)
Csv_writer.writerow(dit)实现效果
原创作品来自爱吃饼干的博主松鼠,评论0发表评论。
wx62f22c19440ca
2022-08-30 14:22
为什么我复制过去运行,但csv中的结果是乱码?
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。