当前位置: 首页 > news >正文

爬取89ip代理、 爬取豆瓣电影

1 爬取89ip代理
2 爬取豆瓣电影

1 爬取89ip代理

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
from requests.exceptions import ProxyErrorclass SpiderIP:def __init__(self):# 定义目标地址哦self.tag_url = "https://www.89ip.cn/"self.headers = {"User-Agent": UserAgent().random}def spider_index_response(self):response = requests.get(url=self.tag_url, headers=self.headers)return response.textdef create_soup(self):return BeautifulSoup(self.spider_index_response(), 'lxml')def spider_ip_port(self):soup = self.create_soup()tr_list = soup.select('div.layui-row.layui-col-space15 > div.layui-col-md8 > div > div.layui-form > table > tbody > tr')data_list = []for tr in tr_list:td_list = tr.find_all("td")ip = td_list[0].text.strip()port = td_list[1].string.strip()store = td_list[3].get_text().strip()# {"http":"http://IP:PORT"}data_list.append({"store": store, "proxies": {"http": f"http://{ip}:{port}"}})return data_listdef __spider_baidu(self, proxies):try:response = requests.get("http://httpbin.org/get", headers=self.headers, proxies=proxies, timeout=2)# 检查请求是否成功if response.status_code == 200:# 处理响应内容response.encoding = 'utf-8'  # 设置响应内容的编码格式为utf-8# 解析JSON结果data = response.text  # 获取响应信息print(data)else:print("请求失败:", response.status_code)except ProxyError:passdef test_ip(self):data_list = self.spider_ip_port()for index, data in enumerate(data_list, start=1):store = data.get("store")proxies = data.get("proxies")print(f"这是第 {index} 条数据! 运营商是 :>>> {store}")proxies = self.__spider_baidu(proxies=proxies)if proxies:print(f"当前代理可用")else:print(f"已废除")def main(self):self.test_ip()if __name__ == '__main__':s = SpiderIP()s.main()

2 爬取豆瓣电影

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
from lxml import etreeclass SpiderBase:def __init__(self):self.tag_url_list = []self.headers = {"User-Agent": UserAgent().random}class SpiderTopSoup(SpiderBase):def __init__(self):super().__init__()self.tag_url_list = self.__create_tag_url_list()def __create_tag_url_list(self):tag_url_list = []for i in range(0, int(250 / 25)):if i == 0:tag_url = "https://movie.douban.com/top250"tag_url_list.append(tag_url)else:tag_url = f"https://movie.douban.com/top250?start={i * 25}"tag_url_list.append(tag_url)return tag_url_listdef __create_soup(self, page_text):return BeautifulSoup(page_text, 'lxml')def __spider_detail_data(self, soup):data_list = []div_list = soup.find_all("div", class_="item")for div in div_list:#pic_div = div.find("div", class_="pic")# 封面图链接地址img_url = pic_div.a.img.get("src")# 排名level = pic_div.em.text# 详情链接detail_url = pic_div.a.get("href")bd_a_span_list = div.find("div", class_="info").find("div", class_="hd").a.find_all("span")try:title = bd_a_span_list[0].textexcept:title = ""try:title_eg = bd_a_span_list[1].textexcept:title_eg = ""try:title_desc = bd_a_span_list[2].textexcept:title_desc = ""bd_div = div.find("div", class_="info").find("div", class_="bd")# 导演和上映日期action, publish_date = [data.replace("\xa0", "").strip() for data in bd_div.p.text.strip().split("\n")]# 评分 和 评价span_list = bd_div.find("div", class_="star").find_all("span")score = span_list[1].textcomment_num = span_list[-1].text[0:-3]# 格言try:quote = bd_div.find("p", class_="quote").span.textexcept:quote = ""data_list.append({"title": title,"title_eg": title_eg,"title_desc": title_desc,"img_url": img_url,"level": level,"detail_url": detail_url,"action": action,"publish_date": publish_date,"score": score,"comment_num": comment_num,"quote": quote,})print(data_list)return data_listdef spider_index_data(self, tag_url):response = requests.get(url=tag_url, headers=self.headers)soup = self.__create_soup(page_text=response.text)return self.__spider_detail_data(soup=soup)def main(self):data_list_all = []for tag_url in self.tag_url_list:data_list = self.spider_index_data(tag_url=tag_url)data_list_all.extend(data_list)print(len(data_list_all))if __name__ == '__main__':s = SpiderTopSoup()s.main()

版本2(建议用这个)

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
from lxml import etreemovie_dict = {"title": '电影名',"title_eg": '英文名',"title_desc": '简介',"img_url": '图片链接',"level": '级别',"detail_url": '播放地址',"action": '导演和演员',"publish_date": '播放日期',"score": '评分',"comment_num": '评论数',"quote": '格言',
}class SpiderBase:def __init__(self):self.tag_url_list = []self.headers = {"User-Agent": UserAgent().random}class SpiderTopSoup(SpiderBase):def __init__(self):super().__init__()self.tag_url_list = self.__create_tag_url_list()def __create_tag_url_list(self):tag_url_list = []for i in range(0, int(250 / 25)):if i == 0:tag_url = "https://movie.douban.com/top250"tag_url_list.append(tag_url)else:tag_url = f"https://movie.douban.com/top250?start={i * 25}"tag_url_list.append(tag_url)return tag_url_listdef __create_soup(self, page_text):return BeautifulSoup(page_text, 'lxml')def __spider_detail_data(self, soup):data_list = []div_list = soup.find_all("div", class_="item")for div in div_list:#pic_div = div.find("div", class_="pic")# 封面图链接地址img_url = pic_div.a.img.get("src")# 排名level = pic_div.em.text# 详情链接detail_url = pic_div.a.get("href")bd_a_span_list = div.find("div", class_="info").find("div", class_="hd").a.find_all("span")try:title = bd_a_span_list[0].textexcept:title = ""try:title_eg = bd_a_span_list[1].textexcept:title_eg = ""try:title_desc = bd_a_span_list[2].textexcept:title_desc = ""bd_div = div.find("div", class_="info").find("div", class_="bd")# 导演和上映日期action, publish_date = [data.replace("\xa0", "").strip() for data in bd_div.p.text.strip().split("\n")]# 评分 和 评价span_list = bd_div.find("div", class_="star").find_all("span")score = span_list[1].textcomment_num = span_list[-1].text[0:-3]# 格言try:quote = bd_div.find("p", class_="quote").span.textexcept:quote = ""data_dict = {"title": title,"title_eg": title_eg,"title_desc": title_desc,"img_url": img_url,"level": level,"detail_url": detail_url,"action": action,"publish_date": publish_date,"score": score,"comment_num": comment_num,"quote": quote,}for key, value in movie_dict.items():new_dict = f"{value}: {data_dict[key]}"data_list.append(new_dict)print(data_list)return data_listdef spider_index_data(self, tag_url):response = requests.get(url=tag_url, headers=self.headers)soup = self.__create_soup(page_text=response.text)return self.__spider_detail_data(soup=soup)def main(self):data_list_all = []for tag_url in self.tag_url_list:data_list = self.spider_index_data(tag_url=tag_url)data_list_all.extend(data_list)print(len(data_list_all))if __name__ == '__main__':s = SpiderTopSoup()s.main()

相关文章:

爬取89ip代理、 爬取豆瓣电影

1 爬取89ip代理 2 爬取豆瓣电影 1 爬取89ip代理 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup from requests.exceptions import ProxyErrorclass SpiderIP:def __init__(self):# 定义目标地址哦self.tag_url "https://www.89i…...

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台 摘要 随着信息技术的迅速发展,快速构建高质量、高可靠性的企业级应用成为了迫切需求。XBoot,作为一个基于Spring Boot 2.x的一站式前后端分离快速开发平台,通过整合微信…...

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂

详情介绍 这次给大家带来5月份最新的短视频挂机项目,简单易上手,而且不需要任何投入,经过测试收益非常可观,软件完全免费,特别适合没有时间但是想做副业的家人们...

Day31:单元测试、项目监控、项目部署、项目总结、常见面试题

单元测试 保证独立性。 Assert:断言,一般用来比较是否相等,比如 Assert.assertEquals 在JUnit测试框架中,BeforeClass,Before,After和AfterClass是四个常用的注解,它们的作用如下: …...

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…...

面试过程种遇到的面试题收集

文章目录 讲一讲这个项目是干什么的?需求规格说明书有哪些章节?职工部门层级如何显示在一张SQL表上?需求开发用到了哪些技术?HashMap 底层数据结构说一下?介绍一下红黑树?HashMap是线程不安全的&#xff0c…...

Vue学习:21.mixins混入

在Vue中,mixins(混入)是一种用于分发Vue组件中可复用功能的灵活机制。它们允许你抽取组件中的共享功能,如数据、计算属性、方法、生命周期钩子等,并将其作为单独的模块复用到多个组件中。这种方式有助于保持代码的DRY&…...

上传文件到 linux

一、mac 法一:scp 先进入mac的 Node_exporter文件(要上传的文件)目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz,然后…...

NEO 学习之session7

文章目录 选项 A:它涉及学习标记数据。 选项 B:它需要预定义的输出标签进行训练。 选项 C:它涉及在未标记的数据中寻找模式和关系。 选项 D:它专注于根据输入-输出对进行预测。 答案:选项 C 描述了无监督学习的本质&am…...

毕业设计uniapp+vue有机农产品商城系统 销售统计图 微信小程序

本人在网上找了一下这方面的数据发现农村中的信心普及率很是低农民们都不是怎么会用手机顶多就是打打电话发发短信,平时不太会上网更不会想到通过网络手段去卖出自己的劳作成果—农产品,这无疑大大浪费了农民的劳动成果和国家资源也大大打击了人们的生产…...

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…...

metabase部署与实践

1. 项目目标 (1)了解metabase特点 (2)熟练部署metabase工具 (3)掌握metabase基本使用 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 metabase 10.0.1.141 metabase 2.2. 基础准备 系统镜…...

nacos v2.2.3 docker简单安装使用

nacos v2.2.3 docker简单安装使用 Nacos 官方文档: https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html 控制台: http://127.0.0.1:8848/nacos/ 初始用户名、密码: 账号:nacos 密码:nacos 启动docker…...

java设计模式-生成器模式

文章目录 生成器模式(Builder)1、目的和适用场景2、角色和职责3、实现步骤4、示例15、示例26、优点7、示例场景 生成器模式(Builder) 生成器模式(Builder Pattern)是一种创建型设计模式,它用于…...

《前端面试题》- TypeScript - TypeScript的优/缺点

问题 简述TypeScript的优/缺点 答案 优点 增强了代码的可读性和可维护性包容性,js可以直接改成ts,ts编译报错也可以生成js文件,兼容第三方库,即使不是ts编写的社区活跃,完全支持es6 缺点 增加学习成本增加开发成…...

微服务---feign调用服务

目录 Feign简介 Feign的作用 Feign的使用步骤 引入依赖 具体业务逻辑 配置日志 在其它服务中使用接口 接着上一篇博客,我们讲过了nacos的基础使用,知道它是注册服务用的,接下来我们我们思考如果一个服务需要调用另一个服务的接口信息&…...

刷题笔记 - 滑动窗口

文章目录 滑动窗口最长无重复子串最小覆盖子串串联所有单词的子串长度最小的子数组滑动窗口最大值字符串的排列最小区间 滑动窗口 所有题目来自leetcode的回答:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/3982/hua-d…...

Docker搭建LNMP+Wordpress的实验

目录 一、项目的介绍 1、项目需求 2、服务器环境 3、任务需求 二、Linux系统基础镜像 三、部署Nginx 1、建立工作目录 2、编写Dockerfile 3、准备nginx.conf配置文件 4、设置自定义网段和创建镜像和容器 5、启动镜像容器 6、验证nginx 三、Mysql 1、建立工作目录…...

使用Python Pandas实现两表对应列相加(即使表头不同)

目录 引言 Pandas库简介 实现对应列相加 步骤一:加载数据 步骤二:重命名列 步骤三:对应列相加 步骤四:保存结果 案例分析 结论 引言 在数据分析和处理的日常工作中,我们经常会遇到需要将来自不同数据源的数据…...

Linux 虚拟主机切换php版本及参数

我使用的Hostease的Linux虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机,但是没有找到切换PHP以及查看PHP有哪些版本的位置,因此咨询了Hostease的技术支持,寻求帮助了解到可以实现在cPanel面板上找到此切换PHP版本的按钮&…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...