引言
本篇文章较为基础,没有什么技术含量,主要是为了回顾一下如何用XPath提取HTML页面中的数据
思路分析
首先,进入豆瓣电影的主页,并且选择全部正在热映的电影,进入此页面
这就是我们要爬取页面的URL地址
https://movie.douban.com/cinema/nowplaying/weifang/
URL地址最后一部分是当前你所在的地区
地址请求时的套路就是常规的爬虫头部伪装,今天要看的关键是页面数据的提取,这里,我就用XPath来提取数据吧!不懂XPath语法的小伙伴请自行百度。
分析网页的布局,我们可以发现,每一个影片都位于一个li标签中,而所有的li标签都位于一个ul标签中,因此,我们只要找到每一个li标签,再进行相应的数据提取即可。具体的操作,直接看代码吧!
代码
# !/usr/bin/env python
# —*— coding: utf-8 —*—
# @Time: 2020/2/1 19:17
# @Author: Martin
# @File: douban.py
# @Software:PyCharm
import requests
from lxml import etree
import pandas as pd
"""
豆瓣电影(正在热映的电影)爬取
"""
url = 'https://movie.douban.com/cinema/nowplaying/weifang/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'Referer': 'https://movie.douban.com/'}
response = requests.get(url, headers=headers)
text = response.text
html = etree.HTML(text)
ul = html.xpath("//ul[@class='lists']")[0]
lis = ul.xpath("./li")
movies = []
for li in lis:
title = li.xpath("@data-title")[0]
score = li.xpath("@data-score")[0]
star = li.xpath("@data-star")[0]
release = li.xpath("@data-release")[0]
duration = li.xpath("@data-duration")[0]
region = li.xpath("@data-region")[0]
director = li.xpath("@data-director")[0]
actors = li.xpath("@data-actors")[0]
img = li.xpath(".//img/@src")[0]
data = {
'title': title,
'score': score,
'star': star,
'release': release,
'duration': duration,
'region': region,
'director': director,
'actors': actors,
'img': img
}
movies.append(data)
df = pd.DataFrame(movies)
df.to_csv("./result/douban.csv", index=False, encoding='utf_8_sig')