Python---Anaconda--jupyter Notebook--爬[特殊字符]豆ban电影top250 静态页面数据示例

重要提示,严正声明:注意法律和网站的使用条款,拒绝违法违规操作。仅作学习研究使用。

前提:已经安装好相关软件或服务

【我的是win10系统; Python3.8;Anaconda Navigator;jupyter Notebook...】

【也可以用PyCharm或VSCode,但我没试过】

技术说明:

        1.Requests库:用于发送HTTP请求,获取网页内容

        2.BeautifulSoup库:用于解析HTML,提取所需数据

步骤:

1        打开 Anaconda,点  jupyter Notebook 下面的 Launch ,进入jupyter的浏览器 文件夹(第三张图)【一般会自动弹出】

可以为爬虫项目单独创建一个环境 Environments (第二张图中),避免版本库冲突。【但我没整这个】

2        在浏览器右侧---New---下拉框中选择你的环境,新建一个Notebook

点击后会出现如下界面,可以直接将untitled 改名,在单元格中编写代码

3        (最终代码在图后)代码写好后,点 三角运行,查看结果,正确运行后下面会出现新的一条单元格

【我第一遍运行失败了,报错IndentationError(缩进错误),

原因:Python的import语句属于 模块级代码 ,必须写在 全局作用域 ,即不缩进

解决方法就是检查代码,如果使用的是代码编辑器,如VSCode,可以使用它的格式化代码功能,自动修正缩进】

正确运行后,结果如下

最终代码:

import requests
from bs4 import BeautifulSoup

url = 'https://movie.douban.com/top250'

#添加浏览器请求头
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept-Language':'zh-CN.zh;q=0.9',#可选:声明语言偏好
}
response = requests.get(url,headers=headers)#传入headers参数

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    movie_items = soup.find_all('div', class_='item')
    for item in movie_items:
        title = item.find('span', class_='title').text
        rating = item.find('span', class_='rating_num').text
        print(f'电影名称: {title}, 评分: {rating}')
else:
    print(f'请求失败,状态码: {response.status_code}')

另:问题及解决

我的第二遍运行:请求失败 418,这个表示 服务器识别到我们的请求是爬虫行为并拒绝响应

解决方法:

1.添加请求头(User-Agent)【我只试了这个方法,别的没试,不知道能不能行】


#添加浏览器请求头
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept-Language':'zh-CN.zh;q=0.9',#可选:声明语言偏好
}
response = requests.get(url,headers=headers)#传入headers参数

2.使用Session保持会话

import requests
from bs4 import BeautifulSoup

url = 'https://movie.douban.com/top250'

# 创建 Session 对象并设置请求头
session = requests.Session()
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
})

response = session.get(url)  # 使用 session 发送请求

# 后续解析代码...

3.降低请求频率,添加随机延迟模拟人类操作

import time
import random

# 每次请求后随机暂停 2~5 秒
time.sleep(random.uniform(2, 5))

4.处理动态Cookies或Token

部分网站会验证动态参数,需通过开发者工具(F12)手动提取

具体做法:

1)浏览器访问目标页面

2)按F12----NetWork,刷新页面

3)找到目标请求,复制请求头中的Cookie字段

4)将Cookie添加到代码中

headers = {
    'User-Agent': '...',
    'Cookie': '你的 Cookie 字符串',  # 粘贴复制的 Cookie
}

5.使用代理IP

若IP被封禁,可通过代理服务器发送请求

proxies = {
    'http': 'http://10.10.1.10:3128',  # 替换为可用代理
    'https': 'http://10.10.1.10:1080',
}

response = requests.get(url, headers=headers, proxies=proxies)

6.模拟浏览器(Seleninum)

若以上方法均无效,可使用Seleninum控制真是浏览器绕过反爬

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup

# 配置 Chrome 驱动
service = Service('路径/chromedriver.exe')  # 需下载对应驱动
driver = webdriver.Chrome(service=service)

driver.get('https://movie.douban.com/top250')
soup = BeautifulSoup(driver.page_source, 'html.parser')

# 解析代码...

driver.quit()  # 关闭浏览器

注意事项:

发爬虫问题:确保爬虫行为符合网站robots.txt规则,避免法律风险。

代码执行顺序:jupyter单元格按顺序执行

ModuleNotFoundError 依赖库缺失:正确安装requests 和beautifulsoup4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈见喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值