爬虫实战7:豆瓣影视爬取
文章目录
前言
一、页面解析
第一步:本次爬取的内容是豆瓣下电影标签,涉及到的热门主要如下所示,爬取的字段主要有:
['电影名','评分','上映时间','导演','编剧','演员1','演员2','演员3','演员4','演员5','类型1','类型2']
第二步:对页面解析,得出使用哪个解析工具比较方便,对字段进行处理,右键检查元素
二、代码展示
1.引入库
import requests
import json
import csv
import time
from lxml import etree
2.代码书写
1、对动态加载的链接进行分析,可以发现,只有page_start在发生变化,变化的规律是0*20,可以构造链接对数据进行爬取
https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=20
def get_parse(result):
items = result['subjects']
for it in items:
id = it['id']
# 电影名称
movie = it['title']
# 评分
pingfen = it['rate']
# 链接
link = it['url']
data = [id, movie, pingfen, link]
get_content(movie,pingfen,link)
time.sleep(1)
# print(data)
2、对详情页进行爬取,其中涉及到的字段比较多,每个国家的电影的字段没有规律,没有获取全部字段,只爬取了导演,编辑,主演,类型,播放时间等字段
def get_content(movie,pingfen,link):
D=[]
res = requests.get(url=link, headers=headers).text
items = etree.HTML(res)
# item = items.xpath('//*[@id="info"]')
# //*[@id="info"]/span[2]/span[2]/a
# 上映时间
shijian=items.xpath('//*[@id="content"]/h1/span[2]/text()')[0].strip('(').strip(')')
# 导演
daoyan = items.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]
# 编剧
bianju = items.xpath('//*[@id="info"]/span[2]/span[2]/a/text()')[0]
# 主演
zhuyan1 = items.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')[0]
zhuyan2 = items.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')[1]
zhuyan3 = items.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')[2]
try:
zhuyan4 = items.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')[3]
except:
zhuyan4=''
try:
zhuyan5 = items.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')[4]
except:
zhuyan5=''
# 类型1
leixing = items.xpath('//*[@id="info"]/span[5]/text()')[0]
# 类型2
leixing2 = items.xpath('//*[@id="info"]/span[6]/text()')[0]
data = [movie,pingfen,shijian,daoyan, bianju, zhuyan1,zhuyan2,zhuyan3,zhuyan4,zhuyan5,leixing, leixing2]
print(data)
D.append(data)
save(D)
总结
爬取时遇到的问题
(1)豆瓣IP反爬,豆瓣对IP进行了限制访问,如果需要大量爬取需要使用IP代理
(2)字段限制,只能爬取20页
(3)字段复杂,无法获取全部,可以考虑使用正则获取
更多精彩内容:关注公众号【有趣的数据】