宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

爬取豆瓣电影Top250影片信息

  • 查看影片的详细信息
  • 爬取过程
    • 需安装的包
    • 确定爬取地址
    • 发送请求头
    • 解析数据
    • 保存数据
    • 完整代码

查看影片的详细信息

进入豆瓣电影Top250,选择某一影片,右击,选择“检查元素”。
爬取豆瓣电影Top250影片信息-风君子博客

爬取过程

需安装的包

安装requests、etree、json。

// An highlighted block
import json
import requests
from lxml import etree

确定爬取地址

由于豆瓣电影Top250是分页的,即计划爬取的影片信息分布在不同的页面上,其对应的网址不同,故需对不同的爬取地址统一格式。
爬取豆瓣电影Top250影片信息-风君子博客
代码如下:

// An highlighted block
url_list=[]
base_url="https://movie.douban.com/top250?start={}&filter="
for i in range0,10):url=base_url.formati*25)url_list.appendurl)
printurl_list)

发送请求头

很多网站有反爬虫机制,如果发送没有haeders信息的请求,会被认为是爬虫,则会被禁止请求。设置header,通过request发送请求头。header中必须包含的信息有User_Agent,还可包括Host、Referer、Cookie等,查看方式如下。
爬取豆瓣电影Top250影片信息-风君子博客

发送请求代码如下:

// An highlighted block
header={    " Host": "movie.douban.com""User-Agent": "Mozilla/5.0 Windows NT 10.0; Win64; x64) AppleWebKit/537.36 KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"#Referer Cookie
}
for url in url_list:data=requests.geturl,headers=header,allow_redirects=False).content.decode)printdata)

解析数据

可利用BeautifulSoup或etree.HTML解析数据,此处使用后者。

// An highlighted block
xpath_data=etree.HTMLdata)

通过下图,可以看到每一影片的完整信息对应的源代码为<div class="item">,影片题目对应的源代码为<a href="https://movie.douban.com/subject/1292052/">,影片导演及出版信息等对应的源代码为<p class="">,影片评分对应的源代码为<div class="star">,影片简介对应的源代码为<p class="quote">
爬取豆瓣电影Top250影片信息-风君子博客

进一步解析代码如下:

// An highlighted block
xpath_data=etree.HTMLdata)
movie_list=xpath_data.xpath'//div[@class="item"]')  #获取每一部电影的全部信息
data_list=[]
for movie in move_list:movie_dic={}movie_dic['herf']=movie.xpath'.//div[@class="hd"]/a/@herf')[0]  #获取每一部电影的链接movie_dic['name']=movie.xpath'.//a/span/text)')[0]  #获取每一部电影的名字movie_dic['dir&act']=movie.xpath'.//div[@class="bd"]/p/text)')[0] .replace'\n','').replace' ','')  #获取每一部电影的导演和演员movie_dic['year&coun&class']=movie.xpath'.//div[@class="bd"]/p/text)')[1] .replace'\n','').replace' ','')  #获取每一部电影的放映时间、出版国家、标签movie_dic['rating']=movie.xpath'.//div[@class="star"]/span/text)')[0]   #获取每一部电影的评分movie_dic['comment']=movie.xpath'.//div[@class="star"]/span/text)')[1]  #获取每一部电影的评论人数movie_dic['summary']=movie.xpath'p[@class="quote"]/span/text)')[0].replace' ','')  #获取每一部电影的简介data_list.appendmovie_dic)
printdata_list)

保存数据

将解析得到的数据保存为json格式,代码如下:

// An highlighted block
json.dumpdata_list,open'movie_250.json','w',encoding='UTF-8'))

完整代码

爬取豆瓣电影Top250影片信息的完整代码如下:

// An highlighted block
import json
import requests
from lxml import etree
#构建所有的url
base_url="https://movie.douban.com/top250?start={}&filter="
url_list=[]
for i in range0,10):url=base_url.formati*25)url_list.appendurl)
printurl_list)#数据爬取
header={"Host": "movie.douban.com","User-Agent": "Mozilla/5.0 Windows NT 10.0; Win64; x64) AppleWebKit/537.36 KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"#Referer Cookie
}
data_list=[]for url in url_list:#发送请求data=requests.geturl,headers=header,allow_redirects=False).content.decode)printdata)#解析数据xpath_data=etree.HTMLdata)movie_list=xpath_data.xpath'//div[@class="item"]')  #获取每一部电影的全部信息for movie in movie_list:movie_dic={}movie_dic['herf']=movie.xpath'.//div[@class="hd"]/a/@href')[0]  #获取每一部电影的链接movie_dic['name']=movie.xpath'.//a/span/text)')[0]  #获取每一部电影的名字movie_dic['dir&act']=movie.xpath'.//div[@class="bd"]/p/text)')[0] .replace'\n','').replace' ','')  #获取每一部电影的导演和演员movie_dic['year&coun&class']=movie.xpath'.//div[@class="bd"]/p/text)')[1] .replace'\n','').replace' ','')  #获取每一部电影的放映时间、出版国家、标签movie_dic['rating']=movie.xpath'.//div[@class="star"]/span/text)')[0]   #获取每一部电影的评分movie_dic['comment']=movie.xpath'.//div[@class="star"]/span/text)')[1]  #获取每一部电影的评论人数movie_dic['summary']=movie.xpath'.//p[@class="quote"]/span/text)')   #获取每一部电影的简介data_list.appendmovie_dic)#存储数据
json.dumpdata_list,open'movie_250.json','w',encoding='UTF-8'))

参考资料:廖雪峰爬虫课程