requests+lxml+xpath爬取豆瓣电影

时间:2022-07-23
本文章向大家介绍requests+lxml+xpath爬取豆瓣电影,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

(1)lxml解析html

from lxml import etree
#创建一个html对象
html=stree.HTML(text)
result=etree.tostring(html,encoding="utf-8").decode("utf-8")

requests+lxml+xpath实现豆瓣电影爬虫

import requests
from lxml import etree

原始界面:

url="https://movie.douban.com/cinema/nowplaying/wuhan/"
response=request.get(url,headers=headers)
text=response.text
html=etree.HTML(text)

我们会得到一个html对象

转换成字符串看下结果

result=etree.tostring(html,encoding="utf-8").decode("utf-8")

部分结果如下:

然后进行xpath解析:

我们对准其中一部电影点击鼠标右键--检查,得到如下视图:

我们发现,上映电影的信息都在带有属性lists的ul中,我们可以对此进行xpath解析,(我们解析的是html对象,而不是转成字符串的结果):

uls=html.xpath("//ul[@class='lists']")[0]

我们在转成字符串查看一下结果:

res=etree.tostring(uls,encoding="utf-8").decode("utf-8")
print(res)

正是我们想要的,我们接着解析里面的内容:

首先获取所有的li:

#这句的意思是获取当前uls下的所有直接li
lis=uls.xpath("./li)

结果是一系列的li对象:

我们再分别进行解析:

movies=[]
for li in lis:
    name=li.xpath("@data-title")[0]
    score=li.xpath("@data-score")[0]
    country=li.xpath("@data-region")[0]
    director=li.xpath("@data-director")[0]
    actors=li.xpath("@data-actors")[0]
    category=li.xpath("@data-category")[0]
    movie={
        "name":name,
        "score":score,
        "country":country,
        "director":director,
        "actors":actors,
        "category":category
    }
    movies.append(movie)
print(movies)

部分结果如下:

在json中格式化结果如下:

至此,一个初步的爬虫就完成了。