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 条评论
登录 后参与评论

相关文章

来自专栏iOS122-移动混合开发研究院

Aspects– iOS的AOP面向切面编程的库

简介 一个简洁高效的用于使iOS支持AOP面向切面编程的库.它可以帮助你在不改变一个类或类实例的代码的前提下,有效更改类的行为.比iOS传统的 AOP方法,更加...

2578
来自专栏网络

HTML 正文内容提取库 Boilerpipe

Boilerpipe 是一个能从 HTML 中剔除广告和其他附加信息,提取出目标信息(如正文内容、发布时间)的 Java 库。 授权协议:Apache 开发语言...

2016
来自专栏梦里茶室

Google机器学习教程心得(二)决策树与可视化

Visualizing a Decision Tree Google Machine Learning Recipes 2 官方中文博客 http://ch...

1879
来自专栏点滴积累

geotrellis使用(十四)导出定制的GeoTiff

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 需求说...

2746
来自专栏JadePeng的技术博客

贝叶斯文本分类c#版

关于这个话题,博客园已经有多个版本了 基于朴素贝叶斯分类器的文本分类算法(上) 也谈贝叶斯分类(C#)版本 PyMining-开源中文文本数据挖掘平台 Ver ...

2905
来自专栏技术总结

Swift3.1动画之Core Image

1887
来自专栏北京马哥教育

什么是python/django web程序员在三个月内应该学习的知识

This is a collection of things I think any beginner web developer working on the...

3395
来自专栏机器之心

快速开启你的第一个项目:TensorFlow项目架构模板

2717
来自专栏Golang语言社区

Golang中image/jpeg包和image/png包用法

jpeg包实现了jpeg图片的编码和解码 func Decode(r io.Reader) (image.Image, error) //Decode读取一...

4664
来自专栏XAI

【手写文字识别】-JavaAPI示例代码

手写文字识别-JavaAPI示例代码 不知不觉手写文字识别百度已经开始邀测了。需要的小伙伴去申请了哦。申请方式加入文字识别群找PM。或者工单提交申请。都要说明自...

8518

扫码关注云+社区