爬虫实战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)字段复杂,无法获取全部,可以考虑使用正则获取


更多精彩内容:关注公众号【有趣的数据】

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值