吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12084|回复: 45
收起左侧

[Python 转载] python 爬取电影天堂全站电影

  [复制链接]
frankyxu 发表于 2019-1-31 16:33

python scrapy爬取电影天堂所有电影

hello,下午好,这次给大家带来的是电影天堂的爬虫,希望大家会喜欢,项目采用的scrapy框架进行爬取,没有用到数据库,直接存成csv格式,这次也没有加入分布式,逻辑比较简单,主要难点就是详情页的数据解析

主要用到的技术

  • scrapy xpath 和re的结合使用
  • 正则表达式的使用

项目截图

  • 运行中
  • 运行结果

核心源码 :beers:

# -*- coding: utf-8 -*-  
import scrapy  

from dytt8.items import Dytt8Item  

class Dytt8SpiderSpider(scrapy.Spider):  
    name = 'dytt8_spider'  
  allowed_domains = ['www.dytt8.net']  
    start_urls = ['http://www.dytt8.net/']  

    headers = {  
        'connection': "keep-alive",  
  'pragma': "no-cache",  
  'cache-control': "no-cache",  
  'upgrade-insecure-requests': "1",  
  'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_13\_4) AppleWebKit/537.36 (KHTML, like Gecko) "  
 "Chrome/71.0.3578.98 Safari/537.36",  
  'dnt': "1",  
  'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",  
  'accept-encoding': "gzip, deflate, br",  
  'accept-language': "zh-CN,zh;q=0.9,en;q=0.8",  
  'cookie': "XLA_CI=97928deaf2eec58555c78b1518df772a",  
  }  

    def start_requests(self):  
        base_url = 'https://www.dytt8.net/html/gndy/{}/index.html'  
  categories = ['china', 'rihan', 'oumei', 'dyzz']  
        for category in categories:  
            yield scrapy.Request(base_url.format(category), headers=self.headers, callback=self.parse)  

    def parse(self, response):  
        # xpath('//div[contains(@class,"a") and contains(@class,"b")]') #它会取class含有有a和b的元素  
  detail_urls = response.xpath('//a[@class="ulink"]/@href').extract()  
        detail_urls = [url for url in detail_urls if 'index' not in url]  
        print(detail_urls)  

        for url in detail_urls:  
            yield scrapy.Request(response.urljoin(url), headers=self.headers, callback=self.detail)  

    def detail(self, response):  

        item = Dytt8Item()  

        name = response.xpath('//p/text()').re('◎译\\u3000\\u3000名\\u3000(.*)')  
        category = response.xpath('//p/text()').re('◎类\\u3000\\u3000别\\u3000(.*)')  
        country = response.xpath('//p/text()').re('◎产\\u3000\\u3000地\\u3000(.*)')  
        douban_rate = response.xpath('//p/text()').re('◎豆瓣评分\\u3000(.*)')  
        language = response.xpath('//p/text()').re('◎语\\u3000\\u3000言\\u3000(.*)')  
        publish_date = response.xpath('//p/text()').re('◎上映日期\\u3000(.*)')  
        IMDb_rate = response.xpath('//p/text()').re('◎IMDb评分\\u3000(.*)')  
        movie_time = response.xpath('//p/text()').re('◎片\\u3000\\u3000长\\u3000(.*)')  
        director = response.xpath('//p/text()').re('◎导\\u3000\\u3000演\\u3000(.*)')  
        main_actor = response.xpath('//p/text()').re('◎主\\u3000\\u3000演\\u3000(.*)')  
        introduce = response.xpath('//p/text()').re('\\u3000\\u3000(.*)')  
        download_url = response.xpath('//a/text()').re('ftp.*')  

        if name:  
            item['name'] = name[0]  
        if category:  
            item['category'] = category[0]  

        if country:  
            item['country'] = country[0]  
        if douban_rate:  
            item['douban_rate'] = douban_rate[0]  
        if language:  
            item['language'] = language[0]  
        if publish_date:  
            item['publish_date'] = publish_date[0]  
        if IMDb_rate:  
            item['IMDb_rate'] = IMDb_rate[0]  
        if movie_time:  
            item['movie_time'] = movie_time[0]  
        if director:  
            item['director'] = director[0]  
        if main_actor:  
            item['main_actor'] = main_actor[0]  
        if download_url:  
            item['download_url'] = ''.join(download_url)  
        if introduce:  
            item['introduce'] = introduce[-1]  
        yield item

如何使用

免费评分

参与人数 12吾爱币 +10 热心值 +10 收起 理由
hj592207079 + 1 + 1 牛皮!
chenyiSMU + 1 + 1 用心讨论,共获提升!
jzyhxj + 1 谢谢@Thanks!
hldnpqzzy + 1 我很赞同!
OAACKY + 1 + 1 我很赞同!
py看考场 + 1 + 1 我很赞同!
祈鸢 + 1 + 1 谢谢@Thanks!
admh + 1 谢谢@Thanks!
JackKAnderson + 1 用心讨论,共获提升!
萧英雄 + 1 热心回复!
苏紫方璇 + 3 用心讨论,共获提升!
恶搞大王 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

天域至尊 发表于 2019-3-18 16:36
推荐学习下数据库的使用,这样方便数据管理,excel终究不是长久之计,海量数据存储就会崩溃。另外基于数据库也可以方便制作感兴趣电影一键下载的功能,或是电影提前预约,比如现在电影正在上映,电影天堂没有片源,一旦有了片源,系统自动下载。这些使用python都是可以做的。感兴趣可以做一做。
 楼主| frankyxu 发表于 2019-2-1 11:14
wanwfy 发表于 2019-2-1 11:07
我是Office,估计wps打开也差不多吧,这个应该是有个解决办法的吧,最近刚刚的接触python,见着代码就想 ...

也有解决办法,你要去搜一下,我以前也碰到过,好像windows下面要改一下文件的编码格式为ansi,要以文本的方式打开
demon_lin 发表于 2019-1-31 16:50
WYE 发表于 2019-1-31 16:59
感谢分享。
 楼主| frankyxu 发表于 2019-1-31 17:01
欢迎收藏评分star,大家有啥想爬的网站也可以提出来
Mrs.YMM 发表于 2019-1-31 17:02
汝优秀!我难追啊
恶搞大王 发表于 2019-1-31 17:10
虽然不难,但是还是支持一下
 楼主| frankyxu 发表于 2019-1-31 17:22
Mrs.YMM 发表于 2019-1-31 17:02
汝优秀!我难追啊

哈哈哈,闻道有先后,术业有专攻
 楼主| frankyxu 发表于 2019-1-31 17:23
恶搞大王 发表于 2019-1-31 17:10
虽然不难,但是还是支持一下

感谢支持,
 楼主| frankyxu 发表于 2019-1-31 17:23

不敢当,真正的大佬比我厉害多了
次日又来 发表于 2019-1-31 17:55
谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 05:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表