Python爬虫实战—2345影视获取经典电影信息

爬虫提前准备包
1)安装解析库lxml
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
命令行进行安装:pip install lxml
2)requests库,安装:pip install requests

获取信息user-agent
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

使用User-Agent可以将爬虫模拟成用户操作计算机,防止爬虫被封。而短时间进行大量访问也有可能被封掉,而自动生成UA可以有效解决这个问题。

进入2345影视:控制台打开获取user-agent
在这里插入图片描述
爬取2345影视经典电影信息,代码块如下

#coding:utf-8
import requests
from lxml import etree
from urllib.parse import urljoin  #url拼接
from getcsv import getcsv
def  get_html(url):
    '''
    获取源代码
    :param url:
    :return:
    '''
    headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"}
    response=requests.get(url,headers=headers)
    #response是2开头,即返回response,否则返回None
    return response.text if str(response.status_code).startswith("2") else None
def get_detail_url_list(url):
    '''
    获取电影详情页url
    :param url:
    :return:
    '''
    #获取页面
    html=get_html(url)
    #如果没有获取页面,返回为空
    if not html:
        print("Response状态码不是200")
        return
    #解析获取的页面
    parser=etree.HTML(get_html(url))
    #获取详情页面的url
    detail_urls=[urljoin(url,i) for i in parser.xpath("//ul[contains(@class,'v_picTxt')]/li/div[@class='pic']/a/@href")]
    #翻页去最后一页
    next_page_tag=parser.xpath("//div[@class='v_page']/a[last()]")
    #到最后一页,获取最后一页
    if next_page_tag:
        next_page_tag=next_page_tag[0]
    #如果next_page_tag文本有下一页(最后页是由下一页),就返回路径,否则返回为空
    next_page_url=urljoin(url,next_page_tag.attrib.get("href")) if "下一页" in next_page_tag.text else None
    return next_page_url,detail_urls

def parse_detail(url):
    '''
    解析详情页的url
    xpath定位是从1开始的
    :param url:
    :return:
    '''
    html = get_html(url)
    if not html:
        print("Response状态码不是200")
        return
     #获取信息路径
    Etree=etree.HTML(html)
    title = "".join(Etree.xpath("//div[@class='tit']/h1/text()"))
    # print(type(title))
    score = Etree.xpath("//div[@class='tit']/p/em/text()")[0].replace("分", "")
    actor = " ".join(Etree.xpath("//ul[contains(@class,'txtList')]/li[contains(@class,'liActor')]/a/text()"))
    director = "".join(Etree.xpath("//ul[contains(@class,'txtList')]/li[@class='li_3']/a/text()"))
    introduction = "".join(Etree.xpath("//ul[contains(@class,'newIntro')]/li/p/span/text()"))
    # 多个list合并成一个list
    list = [title,actor,director,introduction]
    #一个大的list每4个分割成1个list
    lists=list_split(list,4)
    # print(title)
    return lists
#切割列表
def list_split(items, n):
    return [items[i:i+n] for i in range(0, len(items), n)]
def spider():
    next_url = "https://dianying.2345.com/list/jingdian------.html"
    datas=[]
    # 详情页,下一页结果
    while next_url:
        next_url, urls = get_detail_url_list(next_url)
        # print(urls)
        # print(type(urls))
        for url in urls:
            # print(url)
            #添加数据在数组datas
            datas.extend(parse_detail(url))
        # return parse_detail(url)
    return datas



if __name__ == '__main__':
    import time
    datas1=spider()
    path = 'data.csv'
    title = ['电影名', '演员', '导演', '简介']
    w_data = getcsv().write_csv(path, title, datas1)


getcsv.py 代码块如下:

#coding:utf-8
import csv
import os
#利用pandas包来按照列写入csv文件
import pandas as pd

class getcsv:
    def write_csv(self,file_path,title,datas):
        with open(file_path, 'a', encoding='utf-8', newline='') as f:
            # rows=f.readlines()
            # for row in rows:
            try:
                csv_write = csv.writer(f, dialect='excel')
                # 写入列名
                csv_write.writerow(title)
                # 写入多行
                csv_write.writerows(datas)
            except FileNotFoundError as e:
                print('指定的文件无法打开')
            except IOError as e:
                print(e)
                print("文件写入错误")

学习资料:https://ke.qq.com/webcourse/index.html#cid=396790&term_id=100473305&taid=3423527021972982&vid=5285890799988610488

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[完美仿2345网址导航源码] 2345导航网源码完美版v8.3   2345导航网源码完美版v8.3 和官方几乎一样的大气,主要变化在背景底色、搜索引擎框和和右侧新闻,大气、纯净、完整、无插件、无乱码、完美精仿     2013-10-11把搜狗搜索换了百度搜索 2013-08-18简单版看下图   2013-08-18手机版看下图   一如既往纯净、完整、无插件、无乱码、一比一完美精仿,界面整洁,完全免费。绿色源码,占用空间小、轻巧,访问速度快,傻瓜式免安装,上传即可使用,个人轻松建站。   导航功能含有:日期、农历,天气预报,常用邮箱登陆,搜索引擎,新闻热点,休闲娱乐,实用工具等网友常用功能和站点,是非常实用的网址导航。   默认首页:index.htm 修改提示: 1. 下载后请更换自己的网站LOGO 2. 首页LOGO位置i/logo26.png; 3. 内页LOGO位置i/toplogo.gif; 4. 首页替换域名时不能全替换,否则右边新闻会不更新,请看清楚后再替换; 5. 搜索引擎在index.htm和css/input_20130319.js两个地方修改; 6. 统计代码在css/tj.js修改; 7.book    留言板管理使用腾讯公司提供的qq“邮我”组件,安全,方便,网友留言在你的qq邮箱。申请地址:http://open.mail.qq.com/ 打开网址后点击 8. book1 留言板管理后台http://你的网站/book/admin_index.asp 用户名:admin 密码:admin (登陆后台可修改密码) 9. wap文件夹是手机版导航源码, css/func_20130516.js文件判断用户来自PC还是手机,当用户是手机用户时就会转跳wap版 , 把css目录下func_20130516.js文件http://www.2233dh.com/wap/ 改成你的手机版导航网址 10.上传即可使用。   修改提示: 1. 下载后请更换自己的网站LOGO 2. 首页LOGO位置i/logo26.png; 3. 内页LOGO位置i/toplogo.gif; 4. 首页替换域名时不能全替换,index.htm 2345官方js文件不要替换,的否则右边的新闻会不更新,请看清楚后再替换;也可以使用2345官方js ,自己跟新右边的新闻 5. 搜索引擎在index.htm和css/input_20130319.js两个地方修改;   ------------------------------------------------------------------------------------ 声明:本源码仅供源码爱好者研究测试之用,请勿用于商业用途。 技术交流qq1096256694【不懂的可以问我】

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值