python 豆瓣爬虫,python爬虫爬取豆瓣电影top250

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: