【PyCharm】从零到一:Python爬虫实战教程,小白、绕过反爬虫机制、实战案例全解析

本文主要是介绍【PyCharm】从零到一:Python爬虫实战教程,小白、绕过反爬虫机制、实战案例全解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、使用的工具
  • 二、安装必要的库
  • 三、编写程序
    • 1.引入库
    • 2.发送GET请求
    • 3.绕过反爬虫机制
    • 4.解析HTML内容
    • 5.输出需要的内容
  • 四、完整源码
  • 总结


前言

爬虫(Web Crawler)是一种自动浏览万维网并从中收集信息的程序。它们常被用于搜索引擎、数据分析、市场研究等领域。在本文中,我将通过一个简单的Python爬虫实例(获取豆瓣评分前250的电影名称)来演示如何从一个网页中抓取数据。

正如标题所说,本文的关键词为:从零到一、小白、绕过反爬虫机制、实战案例全解析。本文的实战案例也是很多人入门的第一个案例,希望能够帮助到第一次接触爬虫的你。


一、使用的工具

本文使用的工具为:PyCharm 2024.1.5 (Community Edition) 。

工具的安装可以参考这篇博客:【Python、PyCharm】介绍与安装 。

二、安装必要的库

  • 在PyCharm的控制台终端界面输入“ pip install requests beautifulsoup4 ”命令,如图:
    安装库

三、编写程序

1.引入库

  • 因为需要使用Python的requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML内容。

代码如下(示例):

import requests
from bs4 import BeautifulSoup

2.发送GET请求

  • 本文使用的案例目标链接为:https://movie.douban.com/top250
    代码如下(示例):
response = requests.get("https://movie.douban.com/top250")
print(response.status_code)

输出如下(示例):

418

3.绕过反爬虫机制

  • 因为返回的状态码为“418”,418是一个HTTP协议的状态码,也被称为“I’m a teapot”(我是一个茶壶)。状态码418用于表示服务器拒绝为客户端做出请求,因为服务器被认为是一个茶壶,无法为客户端泡茶。这实际上是一种隐喻,用于嘲讽那些滥用HTTP协议或向不适合的服务器发送请求的行为。
  • 通过定义请求头绕过。
    代码如下(示例):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}
response = requests.get("https://movie.douban.com/top250",headers=headers)

输出如下(示例):

200

4.解析HTML内容

  • 使用BeautifulSoup解析HTML内容。
    代码如下(示例):
html = response.text
soup = BeautifulSoup(html,"html.parser")

5.输出需要的内容

  • 通过观察HTML的具体内容,编写程序筛选目标内容。以下得到的结果为前25的电影名。
    代码如下(示例):
all_titles = soup.findAll("span",attrs={"class": "title"})
for title in all_titles:title_string = title.stringif '/' not in title_string:print(title_string)

输出如下(示例):

肖申克的救赎
霸王别姬
阿甘正传
泰坦尼克号
千与千寻
这个杀手不太冷
美丽人生
星际穿越
盗梦空间
楚门的世界
辛德勒的名单
忠犬八公的故事
海上钢琴师
三傻大闹宝莱坞
放牛班的春天
机器人总动员
疯狂动物城
无间道
控方证人
大话西游之大圣娶亲
熔炉
教父
触不可及
当幸福来敲门
寻梦环游记

四、完整源码

代码如下(示例):

import requests
from bs4 import BeautifulSoup# 请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}for start_num in range(0, 250, 25):# 向目标网页的URL发送HTTP GET请求response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)# 确保请求成功if response.status_code == 200:html = response.text# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(html, "html.parser")# 查找所有标题(<span>),提取"class"属性为"title"的元素all_titles = soup.findAll("span", attrs={"class": "title"})for title in all_titles:title_string = title.stringif '/' not in title_string:print(title_string)else:print("请求失败,状态码:", response.status_code)

输出如下(示例):

肖申克的救赎
霸王别姬
阿甘正传
泰坦尼克号
千与千寻
这个杀手不太冷
美丽人生
星际穿越
盗梦空间
楚门的世界
辛德勒的名单
忠犬八公的故事
海上钢琴师
三傻大闹宝莱坞
放牛班的春天
机器人总动员
疯狂动物城
无间道
控方证人
大话西游之大圣娶亲
熔炉
教父
触不可及
当幸福来敲门
寻梦环游记
末代皇帝
龙猫
怦然心动
哈利·波特与魔法石
活着
蝙蝠侠:黑暗骑士
指环王3:王者无敌
我不是药神
乱世佳人
飞屋环游记
素媛
哈尔的移动城堡
十二怒汉
让子弹飞
何以为家
海蒂和爷爷
猫鼠游戏
摔跤吧!爸爸
天空之城
鬼子来了
少年派的奇幻漂流
钢琴家
指环王2:双塔奇兵
大话西游之月光宝盒
闻香识女人
死亡诗社
绿皮书
大闹天宫
罗马假日
黑客帝国
指环王1:护戒使者
天堂电影院
教父2
狮子王
辩护人
饮食男女
搏击俱乐部
本杰明·巴顿奇事
美丽心灵
穿条纹睡衣的男孩
窃听风暴
情书
两杆大烟枪
音乐之声
西西里的美丽传说
看不见的客人
哈利·波特与死亡圣器()
阿凡达
拯救大兵瑞恩
功夫
小鞋子
飞越疯人院
沉默的羔羊
布达佩斯大饭店
哈利·波特与阿兹卡班的囚徒
蝴蝶效应
禁闭岛
致命魔术
心灵捕手
超脱
低俗小说
摩登时代
春光乍泄
喜剧之王
海豚湾
致命ID
美国往事
杀人回忆
哈利·波特与密室
红辣椒
加勒比海盗
一一
七宗罪
狩猎
唐伯虎点秋香
7号房的礼物
蝙蝠侠:黑暗骑士崛起
被嫌弃的松子的一生
甜蜜蜜
爱在黎明破晓前
第六感
超能陆战队
请以你的名字呼唤我
重庆森林
入殓师
断背山
寄生虫
剪刀手爱德华
幽灵公主
爱在日落黄昏时
勇敢的心
菊次郎的夏天
借东西的小人阿莉埃蒂
未麻的部屋
消失的爱人
无人知晓
时空恋旅人
完美的世界
阳光灿烂的日子
倩女幽魂
哈利·波特与火焰杯
小森林 夏秋篇
天使爱美丽
茶馆
侧耳倾听
驯龙高手
教父3
新世界
怪兽电力公司
幸福终点站
一个叫欧维的男人决定去死
玩具总动员3
傲慢与偏见
小森林 冬春篇
头脑特工队
被解救的姜戈
萤火之森
色,戒
釜山行
神偷奶爸
九品芝麻官
哪吒闹海
告白
喜宴
玛丽和马克思
大鱼
模仿游戏
头号玩家
花样年华
射雕英雄传之东成西就
七武士
我是山姆
惊魂记
血战钢锯岭
阳光姐妹淘
恐怖直播
你的名字。
黑客帝国3:矩阵革命
三块广告牌
心迷宫
电锯惊魂
达拉斯买家俱乐部
疯狂原始人
小丑
谍影重重3
心灵奇旅
背靠背,脸对脸
上帝之城
绿里奇迹
英雄本色
风之谷
爱在午夜降临前
海街日记
纵横四海
疯狂的石头
卢旺达饭店
无间道2
2001太空漫游
雨中曲
记忆碎片
小偷家族
无敌破坏王
岁月神偷
忠犬八公物语
荒蛮故事
冰川时代
牯岭街少年杀人事件
恐怖游轮
爆裂鼓手
魔女宅急便
东京教父
大佛普拉斯
贫民窟的百万富翁
遗愿清单
末路狂花
东邪西毒
你看起来好像很好吃
可可西里
源代码
城市之光
疯狂的麦克斯4:狂暴之路
海边的曼彻斯特
黑天鹅
波西米亚狂想曲
真爱至上
爱乐之城
芙蓉镇
青蛇
雨人
高山下的花环
初恋这件小事
终结者2:审判日
人工智能
虎口脱险
恋恋笔记本
花束般的恋爱
无耻混蛋
新龙门客栈
罗生门
崖上的波妞
千钧一发
哈利·波特与死亡圣器()
彗星来的那一夜
白日梦想家
萤火虫之墓
黑客帝国2:重装上阵
奇迹男孩
火星救援
二十二
大红灯笼高高挂
战争之王
哈利·波特与凤凰社
血钻
步履不停
千年女优
谍影重重2
房间
魂断蓝桥
蜘蛛侠:平行宇宙
弱点
谍影重重
阿飞正传
朗读者
隐藏人物
再次出发之纽约遇见你

总结

以上,就是第一次爬虫实例的所有内容。本文仅为初步探讨,旨在抛砖引玉,非常期待读者们能够分享看法和见解,再次感谢您的观看,再见。

这篇关于【PyCharm】从零到一:Python爬虫实战教程,小白、绕过反爬虫机制、实战案例全解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat