Python爬虫之阳光电影爬虫爬虫分析代码

爬虫分析

这里涉及跨页的爬取,需要理清爬虫的思路。

  • 首先打开网站,需爬取前11个分类的电影数据(经典影片格式不一样,爬虫时过滤掉了)。
  • 进入电影列表页后,正则爬取页数和电影的分类标签,以此构造分页url,然后爬取电影的名字和url。
  • 最后在详细页爬取电影的下载地址。

代码

import requests
import re
from lxml import etree
import csv

def get_cate_info(url):
    res = requests.get(url)
    res.encoding = 'gb2312'
    html = etree.HTML(res.text)
    infos = html.xpath('//div[@class="contain"]/ul/li[position()<12]')
    for info in infos:
        cate_name = info.xpath('a/text()')[0]
        cate_url = res.url + info.xpath('a/@href')[0]
        get_movie(cate_url,cate_name)
        # print(cate_name,cate_url)

def get_movie(url,cate_name):
    res = requests.get(url)
    res.encoding = 'gb2312'
    all_page = re.findall('共(.*?)页',res.text)
    kind = re.findall('<option value=\'(list_.*?_).*?',res.text)
    if len(all_page) > 0:
        kind_url = url.rstrip(url.split('/')[-1]) + str(kind[0])
        for page in range(1,int(all_page[0])+1):
            page_url = kind_url + str(page) + '.html'
            resp = requests.get(page_url)
            resp.encoding = 'gb2312'
            html = etree.HTML(resp.text)
            infos = html.xpath('//div[@class="co_content8"]/ul//table')
            for info in infos:
                detail_url = 'http://www.ygdy8.com' + info.xpath('tr[2]/td[2]/b/a/@href')[0]
                movie_name = info.xpath('tr[2]/td[2]/b/a/text()')[0]
                print(detail_url)
                get_resource(detail_url,cate_name,url,movie_name)
            # print(page_url)

def get_resource(url,cate_name,cate_url,movie_name):
    res = requests.get(url)
    res.encoding = 'gb2312'
    html = etree.HTML(res.text)
    movie_resource = html.xpath('//tbody//tr/td/a/text()')[0]
    writer.writerow((cate_name,cate_url,movie_name,url,movie_resource))
    print(movie_resource)


if __name__ == '__main__':
    fp = open(r'C:\Users\Public\Desktop\dianyin.csv', 'w+', newline='', encoding='utf-8')
    writer = csv.writer(fp)
    writer.writerow(('cate_name', 'cate_url', 'movie_name','movie_url', 'movie_resource'))

    get_cate_info('http://www.ygdy8.com/')

结果如图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3115
来自专栏魂祭心

原 canvas绘制clock

4064
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4617
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4878
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2060
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31610
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4708
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5446

扫码关注云+社区