requests库编写的爬虫程序没有那么难!

在Python中,requests库是一个非常流行的HTTP库,它可以帮助我们轻松地发送HTTP请求并获取响应。使用requests库可以编写高效的网络爬虫程序,下面是一个简单的示例代码,它演示了如何使用requests库来爬取网页内容。

python 复制代码
import requests  
  
# 发送GET请求  
response = requests.get('http://example.com')  
  
# 检查响应状态码  
if response.status_code == 200:  
    # 获取网页内容  
    html = response.text  
    # 在这里对html进行处理,提取所需的数据  
    # ...  
else:  
    print('请求失败,状态码:', response.status_code)

上面的代码中,我们首先使用requests.get()函数发送了一个GET请求,并将返回的响应对象赋值给response变量。然后我们检查了响应的状态码,如果状态码为200,表示请求成功,我们可以使用response.text属性获取网页的内容,然后对内容进行处理,提取所需的数据。如果请求失败,我们打印出失败的状态码。

在实际的网络爬虫开发中,我们可能需要处理更复杂的场景,例如处理cookies、登录、分页等等。下面是一个更复杂的示例代码,它演示了如何使用requests库来处理这些场景。

python 复制代码
import requests  
from bs4 import BeautifulSoup  
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.chrome.options import Options  
  
# 登录处理  
def login(url):  
    options = Options()  
    options.add_argument('--headless')  # 无头模式,避免打开浏览器窗口  
    driver = webdriver.Chrome(options=options)  
    driver.get(url)  
    time.sleep(2)  # 等待页面加载完成  
    driver.find_element_by_name('username').send_keys('username')  
    driver.find_element_by_name('password').send_keys('password')  
    time.sleep(1)  # 等待输入完成  
    driver.find_element_by_name('password').send_keys(Keys.RETURN)  # 提交表单  
    time.sleep(10)  # 等待登录完成  
    driver.quit()  # 关闭浏览器窗口  
    return driver.page_source  # 返回页面内容  
  
# 处理cookies  
def get_cookies(url):  
    response = requests.get(url)  
    cookies = response.cookies  # 获取cookies  
    return cookies  
  
# 处理分页  
def get_next_page(url, cookies):  
    headers = {'Referer': url}  # 设置请求头,避免爬虫被检测到  
    response = requests.get(url, headers=headers, cookies=cookies)  
    soup = BeautifulSoup(response.text, 'html.parser')  # 解析网页内容  
    next_page = soup.find('a', href=True, text='下一页')  # 获取下一页链接  
    if next_page:  # 如果存在下一页链接,则继续爬取下一页内容  
        next_page_url = next_page['href']  # 获取下一页链接地址  
        print('下一页链接:', next_page_url)  
        get_next_page(next_page_url, cookies)  # 递归调用get_next_page函数继续爬取下一页内容  
    else:  # 如果不存在下一页链接,则停止爬取后续内容  
        print('已经爬取到最后一页')  
        return True  # 返回True表示已经爬取完所有内容,停止爬取后续内容

上述代码中,我们首先定义了一个login()函数,用于实现登录操作。在这个函数中,我们使用了Selenium库来实现浏览器自动化操作,模拟用户输入用户名和密码并提交表单的操作。需要注意的是,我们在登录成功后调用了driver.quit()方法关闭浏览器窗口,以避免在爬虫程序运行过程中打开过多的浏览器窗口。

接下来,我们定义了一个get_cookies()函数,用于获取目标网站的cookies。在这个函数中,我们使用requests.get()函数发送一个GET请求,并获取响应中的cookies信息。获取到的cookies信息可以用于后续的请求中,以模拟登录状态。

最后,我们定义了一个get_next_page()函数,用于处理分页问题。在这个函数中,我们首先解析了网页内容,并找到了下一页链接。如果存在下一页链接,则递归调用get_next_page()函数继续爬取下一页内容;如果不存在下一页链接,则返回True表示已经爬取完所有内容,停止爬取后续内容。

在实际的网络爬虫开发中,我们可能会遇到更加复杂的情况,例如需要处理JavaScript生成的内容、模拟用户行为、避免被网站封禁等等。针对这些情况,我们可以使用不同的技术手段来解决,例如使用Selenium库模拟用户行为、使用Scrapy框架来避免被网站封禁等等。

总之,使用requests库可以编写简单的网络爬虫程序,但在实际开发中需要针对不同的场景选择合适的技术手段来解决遇到的问题。同时还需要注意遵守法律法规和网站的规则和政策,以避免不必要的法律和道德风险。

相关推荐
星释6 分钟前
Rust 练习册 21:Hello World 与入门基础
开发语言·后端·rust
YUJIANYUE8 分钟前
查立得PHP+Mysql影院选座式教室座位预定系统 v1.0
开发语言·mysql·php
u***096412 分钟前
后端服务熔断降级策略,错误率阈值 什么是服务熔断降级
java·开发语言
烤麻辣烫14 分钟前
23种设计模式(新手)-3接口隔离原则
java·开发语言·学习·设计模式·intellij-idea
程序猿_极客23 分钟前
【2025最新】 Java 入门到实战:数组 + 抽象类 + 接口 + 异常(含案例 + 语法全解析+巩固练习题)
java·开发语言·后端·java基础·java入门到实战
yzx99101331 分钟前
一个嵌入式存储芯片质量评估系统的网页界面设计
开发语言·javascript·ecmascript
树在风中摇曳32 分钟前
数据结构与算法基础入门 —— 从概念到复杂度理解
开发语言·c
源码之家1 小时前
基于python新闻数据分析可视化系统 Hadoop 新闻平台 爬虫 情感分析 舆情分析 可视化 Django框架 vue框架 机器学习 大数据毕业设计✅
大数据·爬虫·python·数据分析·毕业设计·情感分析·新闻
IT油腻大叔1 小时前
DeepSeek-多层注意力计算机制理解
python·深度学习·机器学习
小呀小萝卜儿1 小时前
2025-11-17 学习记录--Python-机器学习作业:项目1 - PM2.5预测
python·学习·机器学习