python教程爬虫开发入门:从基础请求到反爬策略

admin python教程 4


是不是很多新手朋友想学 Python 爬虫,却总被这些问题拦住?写了代码发请求,结果返回一堆乱码;好不容易拿到数据,网站却突然拒绝访问;解析网页时,标签嵌套太复杂,半天提取不出想要的内容?其实啊,爬虫开发没那么玄乎,就像用代码模拟人浏览网页、复制内容,只不过效率更高。今天兔子哥就从最基础的请求发送,讲到怎么应对网站反爬,新手跟着练,很快就能爬取简单数据,一起往下看吧!

一、先搞懂:爬虫到底是啥?为啥用 Python 做爬虫?


核心问题:爬虫就是 “偷数据” 吗?合法吗?
简单说,爬虫是用代码自动获取网页数据的程序。比如你手动复制网页上的商品价格,爬虫能自动批量提取,效率超高。但注意:爬公开数据(比如新闻、公开商品信息)没问题,爬隐私数据(比如用户信息)或有版权的内容,可能违法,一定要遵守网站的 robots 协议(网站根目录 /robots.txt 查看规则)。
为啥 Python 适合做爬虫?因为它有超多现成的库,比如 requests 发请求、BeautifulSoup 解析网页,几行代码就能搞定,比其他语言简单多了。兔子哥刚开始学爬虫时,用 Python 爬豆瓣电影榜单,十几行代码就拿到了 top250 的电影名,成就感立马上来了!

二、基础请求:用代码 “逛网页” 的 3 个步骤


核心问题:怎么让代码像浏览器一样访问网页?
爬虫的第一步是发送请求获取网页内容,就像你在浏览器输入网址按回车。这步用 requests 库最方便,新手必学。

1. 安装 requests 库 —— 给 Python 装 “浏览器插件”


打开命令提示符,输入:
plaintext
pip install requests

安装成功后,就能在代码里导入使用了。

2. 发送 GET 请求 —— 获取网页内容


最常用的请求方式是 GET,比如爬取百度首页内容:
python
import requests# 目标网址url = "https://www.baidu.com"# 发送GET请求response = requests.get(url)# 设置编码,避免中文乱码response.encoding = "utf-8"# 打印网页内容(和浏览器右键“查看网页源代码”一样)print(response.text)

如果打印出一堆 HTML 代码,说明请求成功了!

3. 看懂响应状态码 —— 判断请求是否成功


请求后一定要看状态码,它能告诉你网页有没有正常返回:
  • 200:成功,网页内容拿到了
  • 403:拒绝访问(网站可能把你当爬虫了)
  • 404:网址错了,网页不存在
  • 500:服务器出错,过会儿再试

比如遇到 403 别慌,后面讲反爬策略时会教你怎么解决。

三、数据解析:从 HTML 里 “挑出” 有用信息


核心问题:拿到一堆 HTML 代码,怎么提取标题、价格这些数据?
网页内容是 HTML 格式的,像一堆嵌套的标签,需要用工具解析。新手首推 BeautifulSoup 库,简单直观。

1. 安装 BeautifulSoup—— 给 Python 装 “HTML 解析器”


plaintext
pip install beautifulsoup4

2. 解析步骤:定位标签→提取内容


比如爬取一个网页的标题和所有链接,步骤如下:
python
import requestsfrom bs4 import BeautifulSoupurl = "https://www.example.com"  # 替换成目标网址response = requests.get(url)response.encoding = "utf-8"html = response.text# 创建BeautifulSoup对象,解析HTMLsoup = BeautifulSoup(html, "html.parser")# 提取标题(标签里的内容)title = soup.title.text  # .text获取标签里的文字print("网页标题:", title)# 提取所有链接(标签的href属性)links = soup.find_all("a")  # 找到所有标签for link in links:href = link.get("href")  # 获取href属性值text = link.text  # 获取链接文字print(f"链接:{text},地址:{href}")

3. 常用解析方法(新手必记)


方法作用例子
soup.title找第一个 title 标签soup.title.text 拿标题文字
soup.find("div")找第一个 div 标签soup.find("div", class_="content") 按 class 找
soup.find_all("a")找所有 a 标签遍历提取所有链接
tag.get("href")获取标签属性值提取链接、图片地址

避坑点:class 属性在代码里要写成class_(加下划线),因为 class 是 Python 关键字,直接写会报错,刚开始我总忘加下划线,调试半天才发现!

四、反爬策略:怎么避免被网站 “封杀”?


核心问题:为啥刚开始能爬,后来就被拒绝了?
网站会通过各种手段识别爬虫(比如请求频率太快、没有浏览器标识),然后封 IP。这 5 个方法能帮你绕开大部分反爬措施。

1. 伪装浏览器 —— 加 User-Agent


网站会检查请求的 “身份标识”,爬虫默认的标识很容易被认出。解决办法:在请求头里加浏览器的 User-Agent。
python
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"}response = requests.get(url, headers=headers)  # 发送请求时带上headers

User-Agent 可以在浏览器里按 F12,在 “Network” 里找一个请求的 Request Headers 复制。

2. 控制请求频率 —— 别让网站觉得你 “太勤奋”


短时间内发太多请求,网站会认为你是恶意爬虫。解决办法:每次请求后加延迟。
python
import timefor i in range(10):  # 爬10页数据url = f"https://www.example.com/page/{i}"response = requests.get(url, headers=headers)# 处理数据...time.sleep(2)  # 暂停2秒,模拟人浏览速度

3. 使用代理 IP—— 换个 “身份” 访问


如果 IP 被封,就用代理 IP 换个地址访问。免费代理可以在 “西刺代理” 等网站找,使用方法:
python
proxies = {"http": "http://123.45.67.89:8080",  # 代理IP和端口"https": "https://123.45.67.89:8080"}response = requests.get(url, headers=headers, proxies=proxies)

免费代理可能不稳定,频繁换就行;重要项目可以买付费代理。

4. 处理 Cookie—— 模拟登录状态


有些网站需要登录才能访问数据,这时候要带上登录后的 Cookie。可以在浏览器登录后,从 Network 里复制 Cookie,加到请求头:
python
headers = {"User-Agent": "...","Cookie": "你的Cookie字符串"}

5. 识别动态加载内容 —— 对付 JavaScript 渲染的网页


有些网页内容是用 JavaScript 动态加载的(比如滚动加载更多),requests 爬不到。这时候可以用 Selenium 库模拟浏览器操作,新手暂时先了解,后面再深入学。

五、实战案例:爬取豆瓣电影 top250(新手可抄代码)


用上面学的知识,爬取豆瓣电影 top250 的电影名、评分、简介,步骤如下:
  1. 分析网址:豆瓣 top250 分页网址是https://movie.douban.com/top250?start=0(start=0 是第 1 页,start=25 是第 2 页,以此类推)
  2. 发送请求:带 headers 伪装浏览器
  3. 解析数据:用 BeautifulSoup 提取电影名()、评分(
  4. 循环爬取:爬完 1 页换 start 参数,爬下一页

python
import requestsfrom bs4 import BeautifulSoupimport timeheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"}for page in range(10):  # 爬10页,共250部电影start = page * 25url = f"https://movie.douban.com/top250?start={start}"response = requests.get(url, headers=headers)response.encoding = "utf-8"soup = BeautifulSoup(response.text, "html.parser")# 找到所有电影条目items = soup.find_all("div", class_="hd")for item in items:# 提取电影名(取第一个span标签的文字)title = item.find("span", class_="title").textprint(title)time.sleep(1)  # 每页爬完暂停1秒

运行这段代码,就能看到控制台输出 top250 的电影名了,是不是很简单?

六、新手爬坑指南:这些错误别再犯!


  1. 不看 robots 协议乱爬:有些网站明确禁止爬取,硬爬可能违法,先访问网站域名/robots.txt看看规则。
  2. 请求头不带 User-Agent:很容易被识别为爬虫,导致 403 错误,养成加 headers 的习惯。
  3. 解析时找不到标签:可能是标签有动态 class(网站会变 class 名),或者没等网页加载完就爬,多检查 HTML 源代码。
  4. 频繁请求同一网站:IP 被封后别慌,换个网络(比如用手机热点)或用代理 IP,过段时间再试。

最后跟大家说句实在的,爬虫入门容易,但想爬复杂网站需要多练。刚开始从公开、简单的网站练起(比如豆瓣、维基百科),熟悉后再挑战需要登录或动态加载的网站。兔子哥刚开始爬一个电商网站时,因为请求太快被封了 IP,后来加了延迟和代理,问题就解决了。
记住,爬虫的核心是 “模拟人的行为”,别让网站觉得你是机器。按今天的步骤练,你很快就能用 Python 爬取想要的数据,帮自己省超多重复劳动。但一定要守住底线,不爬敏感数据,不影响网站正常运行,这样才能长久地用技术解决问题。希望这些技巧能帮到你,动手试试吧!

标签: BeautifulSoup www.baidu.com

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~