python爬取近五年的华语电影,并储存到excel表

2023-12-12 20:08

本文主要是介绍python爬取近五年的华语电影,并储存到excel表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

帮群里的一个小朋友写的,这些个名字不是我起的,大学生的作业,勿喷。

第n次更新,加了个获取快代理的免费代理,避免被豆瓣的反爬虫给怼自闭,不过还是有个小bug,就是爬取完成后不会停,如果一直在打印ip代理就手动停止一下吧。收工了,有啥问题可以扫码加我企业微信讨论。

代码如下,仅供参考:

import time
import xlwt
from lxml import etree
import requests
import json
import random
import requests
from bs4 import BeautifulSoup# 获取网站数据
def get_data(url):headers = {'user-agent': 'Mozilla/5.0'}html = requests.get(url, headers)html.encoding = 'utf-8'return html.text
# 解析网站数据
def parse_dara(html):soup = BeautifulSoup(html, 'html.parser')'''protocol = soup.find_all(attrs={'data-title': '类型'})ip = soup.find_all(attrs={'data-title': 'IP'})port = soup.find_all(attrs={'data-title': 'PORT'})'''# 协议 地址 端口protocol = soup.select('#list > table > tbody > tr > td:nth-child(4)')ip = soup.select('#list > table > tbody > tr > td:nth-child(1)')port = soup.select('#list > table > tbody > tr > td:nth-child(2)')data = []       # 存放代理链接for i in range(0, len(ip)):          # 要求len(ip), len(port) len(protocol)的值一样temp = protocol[i].get_text()+'://'+ip[i].get_text()+':'+port[i].get_text()     # 拼接成urldata.append(temp)                                                               # 拼接后的数据,加入到列表return data# 保存数据
def save_data(data):for item in data:with open(proxy, 'a+') as f:f.write(item)f.write('\n')def processing_data(content_list):# 创建一个workbook 设置编码workbook = xlwt.Workbook(encoding='utf-8')# 创建一个worksheetworksheet = workbook.add_sheet('My Worksheet')# 写入excelfor i, content in enumerate(content_list):for x, info in enumerate(content):worksheet.write(i, x, label=info)  # 将数据存入excel# 保存workbook.save('电影信息.xls')def save_info(s, content):info = content.xpath("//div[@id='info']")[0]try:name = str(content.xpath('//*[@id="content"]/h1/span[1]/text()')[0]).replace("'", " ")except:name = "无"try:daoyan =  str(info.xpath("./span[1]/span[2]/a/text()")[0] if info.xpath("./span[1]/span[2]/a/text()") else None ).replace("'", " ")except:daoyan = "无"try:bianju =  str(info.xpath("./span[2]/span[2]/a/text()")[0] if info.xpath("./span[2]/span[2]/a/text()") else None).replace("'", " ")except:bianju = "无"try:zhuyan = '/'.join(info.xpath("./span[3]/span[2]/a/text()")).replace("'", " ")except:zhuyan = "无"try:leixing = '/'.join(info.xpath("./span[@property='v:genre']/text()")).replace("'", " ")except:leixing = "无"try:shangyingshijian= '/'.join(info.xpath(".//span[@property='v:initialReleaseDate']/text()")).replace("'", " ")except:shangyingshijian = "无"try:shichang = str(info.xpath(".//span[@property='v:runtime']/text()")[0]).replace("'", " ")except:shichang = "无"try:pingfen = str(content.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]).replace("'", " ")except:pingfen = "无"try:jianjie =  str(content.xpath('// *[ @ id = "link-report"] / span[1]/text()')[0]).replace("'", " ")except:jianjie = "无"# tupian = str(content.xpath('//*[@id="mainpic"]/a/img/@src')[0]).replace("https://", "")try:pingjiarenshu = content.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/a/span/text()')[0]except:pingjiarenshu = "无"print("爬取第%d部%s年上映,%s主演的%s" % (s, shangyingshijian[0:4], zhuyan, name))# print("电影名称:", name)# print("导演:", daoyan)# print("编剧:", bianju)# print("主演:", zhuyan)# print("评分:", pingfen)# print("评价人数:", pingjiarenshu)# print("类型:", leixing)# print("上映时间:", shangyingshijian)# print("时长:", shichang)# print("简介:", jianjie)# print("图片url:", tupian)one_info = [name, daoyan, bianju, zhuyan, pingfen, pingjiarenshu,leixing, shangyingshijian, shichang, jianjie]all_list.append(one_info)def main():s =0i = 0try:for x in range(0, 9999):url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=time&page_limit=20&page_start='+ str(x*20)headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",'Cookie': 'bid=8u7taHNdsWM; __utmc=30149280; __utmc=223695111; __utmz=223695111.1607998669.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __yadk_uid=9x4B44CN2IsA8mMQ5aAyjQ4SaozNfPF2; __gads=ID=faf2684739e4c7f2-22e5424930c50003:T=1607998670:RT=1607998670:S=ALNI_MYbSVvFUx-vDkas8JkBXbnxevAHWA; ll="118282"; ct=y; _vwo_uuid_v2=DE86177D6BC486F18E203C7287F2B1E77|1fd9d3b9c304cda3f3602953aa741fcc; dbcl2="228452659:QZuIW0RNFQA"; ck=Z6d9; push_noty_num=0; push_doumail_num=0; __utma=30149280.78821852.1607998669.1608094761.1608104129.3; __utmz=30149280.1608104129.3.2.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmt=1; __utmv=30149280.22845; __utmb=30149280.2.10.1608104129; __utma=223695111.1226569761.1607998669.1608094761.1608104244.3; __utmb=223695111.0.10.1608104244; _pk_id.100001.4cf6=1b0982adf0b4c756.1607998669.3.1608104244.1608095066.; _pk_ses.100001.4cf6=*'}with open("proxy.txt", "r") as f:  # 打开文件data = f.readlines()  # 读取文件summ = len(data)proxyss = data[i].replace("\n", "")i+=1if i == summ-1:i = 0proxies = {'http': '{}'.format(proxyss)}print(proxies)content = requests.get(url, proxies=proxies, headers=headers)if content.status_code != 200:print('出错了')content_json = json.loads(content.text)["subjects"]# if not content_json:#     breakfor one_info in content_json:one_id = one_info["id"]print(one_id)url2 = "https://movie.douban.com/subject/%s/" % one_id# content_html = requests.get(url, headers=headers)html = requests.get(url2, proxies=proxies, headers=headers)if html.status_code == 200:content = html.content.decode("utf-8")content = etree.HTML(content)s += 1save_info(s, content)else:print('出错了')time.sleep(1)except:processing_data(all_list)if __name__ == '__main__':proxy = 'proxy.txt'url = 'https://www.kuaidaili.com/free/inha/1'html = get_data(url)data = parse_dara(html)save_data(data)print('获取免费代理结束')all_list = []main()processing_data(all_list)

 

这篇关于python爬取近五年的华语电影,并储存到excel表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485783

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat