Python 网络爬虫快速入门

网络爬虫是一种自动化的程序,用于从互联网上抓取数据。Python 由于其简洁的语法和丰富的库支持,成为编写网络爬虫的理想选择。本文将带你快速入门 Python 网络爬虫,从安装必要的库到编写一个简单的爬虫,再到处理更复杂的情况。

1. 环境准备

1.1 安装 Python

确保你已经安装了 Python。你可以从 Python 官方网站 下载并安装最新版本的 Python。

1.2 安装必要的库

我们将使用以下几个库来编写网络爬虫:

  • requests:用于发送 HTTP 请求。
  • BeautifulSoup:用于解析 HTML。
  • lxml:用于提高解析速度。

使用 pip 安装这些库:

pip install requests beautifulsoup4 lxml

2. 编写第一个爬虫

2.1 发送 HTTP 请求

使用 requests 库发送 HTTP 请求并获取网页内容。

import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:print(response.text)
else:print(f"Failed to retrieve the page. Status code: {response.status_code}")

2.2 解析 HTML

使用 BeautifulSoup 库解析 HTML 并提取所需的数据。

from bs4 import BeautifulSoupurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, 'lxml')title = soup.find('title').textprint(f"Title: {title}")# 提取所有的链接links = soup.find_all('a')for link in links:print(link.get('href'))
else:print(f"Failed to retrieve the page. Status code: {response.status_code}")

3. 处理请求和响应

3.1 设置请求头

有些网站会检查请求头,以防止爬虫访问。你可以设置请求头来模拟浏览器行为。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}response = requests.get(url, headers=headers)

3.2 处理 cookies

某些网站需要 cookies 才能正常访问。你可以使用 requests 库来处理 cookies。

cookies = {'session_id': 'abc123'
}response = requests.get(url, headers=headers, cookies=cookies)

3.3 处理重定向

默认情况下,requests 会自动处理重定向。你可以禁用自动重定向并手动处理。

response = requests.get(url, headers=headers, allow_redirects=False)if response.status_code == 302:redirect_url = response.headers['location']print(f"Redirected to: {redirect_url}")

4. 解析 HTML

4.1 提取文本

使用 BeautifulSoup 提取文本内容。

soup = BeautifulSoup(response.text, 'lxml')
title = soup.find('title').text
print(f"Title: {title}")

4.2 提取属性

提取 HTML 元素的属性值。

links = soup.find_all('a')
for link in links:href = link.get('href')print(href)

4.3 提取多个元素

提取多个相同类型的元素。

paragraphs = soup.find_all('p')
for p in paragraphs:print(p.text)

5. 高级主题

5.1 异步爬虫

使用 aiohttpasyncio 库编写异步爬虫,提高爬取效率。

import aiohttp
import asyncio
from bs4 import BeautifulSoupasync def fetch(session, url):async with session.get(url) as response:return await response.text()async def main():urls = ['https://www.example.com','https://www.example2.com','https://www.example3.com']async with aiohttp.ClientSession() as session:tasks = [fetch(session, url) for url in urls]responses = await asyncio.gather(*tasks)for response in responses:soup = BeautifulSoup(response, 'lxml')title = soup.find('title').textprint(f"Title: {title}")if __name__ == '__main__':asyncio.run(main())

5.2 反爬虫策略

有些网站会采取反爬虫措施,如验证码、IP 封禁等。你可以采取以下措施应对:

  • 使用代理 IP:使用不同的 IP 地址发送请求。
  • 设置合理的请求间隔:避免短时间内发送大量请求。
  • 处理验证码:使用 OCR 技术或第三方服务识别验证码。

5.3 存储数据

将爬取的数据存储到文件或数据库中。

存储到文件
with open('data.txt', 'w') as f:f.write(response.text)
存储到数据库

使用 sqlite3 库将数据存储到 SQLite 数据库中。

import sqlite3conn = sqlite3.connect('data.db')
cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS pages (url TEXT, content TEXT)''')url = 'https://www.example.com'
content = response.textcursor.execute('INSERT INTO pages (url, content) VALUES (?, ?)', (url, content))
conn.commit()
conn.close()

6. 总结

通过本文,你应该已经对 Python 网络爬虫有了基本的了解,并能够编写一个简单的爬虫。Python 的强大之处在于其丰富的库支持,无论是简单的数据抓取还是复杂的异步爬虫,Python 都能提供强大的支持。

希望这篇文章对你有所帮助,祝你在 Python 网络爬虫的道路上一切顺利!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460369.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何有效提升MySQL大表分页查询效率(本文以一张900万条数据体量的表为例进行详细解读)

文章目录 1、提出问题1.1 问题测试 2、解决问题(三种方案)2.1、方案一:查询的时候,只返回主键 ID2.2、方案二:查询的时候,通过主键 ID 过滤2.3、方案三:采用 elasticSearch 作为搜索引擎 3、总结…

DGUS屏使用方法

1、DGUS工程下载 迪文DGUS屏的所有硬件参数和资料下载,都是通过屏上的SD/SDHC接口来完成的,文件必须使用FAT32文件格式。第一次使用SD卡前,推荐先格式化一次,流程如下: 1、 右键单击SD卡,在弹出来的菜单中选…

设计产品宣传册没头绪?推荐一个超多产品宣传册、画册的案例网站

在当今市场竞争激烈的背景下,产品宣传册和画册是企业宣传的重要手段之一。一本独具匠心的宣传册,不仅能够准确传达产品特点,还能吸引潜在客户,提升品牌形象。然而,设计一本优秀的宣传册并非易事,许多设计师…

接口测试(八)jmeter——参数化(CSV Data Set Config)

一、CSV Data Set Config 需求:批量注册5个用户,从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果

【网页布局技术】项目五 使用CSS设置导航栏

《CSSDIV网页样式与布局案例教程》 徐琴 目录 任务一 制作简单纵向导航栏支撑知识点1.合理利用display:block属性2.利用margin-bottom设置间隔效果3.利用border设置特殊边框 任务二 制作简单横向导航栏任务三 制作带图片效果的横向导航栏任务…

基于LangChain构建安全Agent应用实践(含代码)

概述:本文基于langchain和Cyber Security Breaches数据集构建Agent,并基于该Agent实现了数据分析、趋势图输出、预测攻击态势三个功能,最后给出Agent在安全领域应用的三点启示。 前提: 1、拥有openai API KEY;&#…

机器学习-决策树

登录后复制 import numpy as np import matplotlib.pyplot as plt from sklearn import datasetsiris datasets.load_iris() X iris.data[:,2:] y iris.target plt.scatter(X[y0,0], X[y0,1]) plt.scatter(X[y1,0], X[y1,1]) plt.scatter(X[y2,0], X[y2,1]) plt.show() 1.2.…

为什么大模型都是Decoder-only结构?

扫一扫下方,获取更多面试真题的集合 在探讨当前大型语言模型(LLM)普遍采用Decoder-only架构的现象时,我们可以从以下几个学术角度进行分析: 注意力机制的满秩特性:Decoder-only架构采用的因果注意力机制&am…

Linux系统块存储子系统分析记录

1 Linux存储栈 通过网址Linux Storage Stack Diagram - Thomas-Krenn-Wiki-en,可以获取多个linux内核版本下的存储栈概略图,下面是kernel-4.0的存储栈概略图: 2 存储接口、传输速度 和 协议 2.1 硬盘 《深入浅出SSD:固态存储核心…

北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置

迅为iTOP-LS2K0500开发板 迅为iTOP-LS2K0500开发板采用龙芯LS2K0500处理器,基于龙芯自主指令系统(LoongArch)架构,片内集成64位LA264处理器核、32位DDR3控制器、2D GPU、DVO显示接口、两路PClE2.0、两路SATA2.0、四路USB2.0、一路…

电子电气架构 --- 车载芯片现状

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧…

MySQL分层结构由哪些组成?

1、MySQL分层结构由哪些组成? MySQL按照功能模块可以分为3层:连接层、服务层和存储引擎层。 连接层位于Server服务层的最外层,负责与客户端的直接交互,从功能上单独划分一层更合适。 不同的存储引擎在存储层有不同的实现&#x…

Vue3入门--[vue/compiler-sfc] Unexpected token, expected “,“ (18:0)

新手小白学习Vue–入门就踩坑系列 问题描述 创建了一个Person.vue,保存后直接报错: [plugin:vite:vue] [vue/compiler-sfc] Unexpected token, expected "," (18:0) 在网上搜了半天也没找到原因,最后还得靠自己,现将解…

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域,大型语言模型(LLM)凭借其强大的生成与理解能力,正在广泛应用于多个实际场景中。《大模型项目实战:多领域智能应用开发》为大家提供了全面的应用技巧和案例,帮助开发者深…

java:入门基础(1)

练习一:文字版格斗游戏 需求: ​ 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。 举例: ​ 程序运行之后…

Apache Paimon介绍

目录 背景 诞生 应用场景 实时数据分析与查询 流批一体处理 低成本高效存储 具体业务场景示例 总结 系统架构 存储层 元数据管理 计算层 数据摄入和输出 查询优化 扩展性和可靠性 生态系统集成 总结 核心概念 表(Table) 模式&#xf…

书生实战营第四期-第三关 Git+InternStudio

一、任务1: 破冰活动:自我介绍 1.fork项目到自己的账号下 2. 配置git并克隆项目到InternStudio本地 3.创建分支 4.创建自己的介绍文件 5.提交更改分支 6.推送分支到远程仓库 这里推送时会报错 问题解决:将密码换成access token 7.检查提交内容 分支…

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

2-134 基于matlab的图像边缘检测

基于matlab的图像边缘检测,采用六种算子(分别是gabor、拉普拉斯、priwitt、robert、sobel、wallis微分算子),对图象进行边缘检测比较,输出边缘检测结果。可对比效果优劣。程序已调通,可直接运行。 下载源程序请点链接…

【计网】网络协议栈学习总结 --- 浏览器上输入网址域名后点击回车,到底发生了什么?

未来的路不会比过去更笔直,更平坦, 但是我并不恐惧, 我眼前还闪动着道路前方野百合和野蔷薇的影子。 --- 季羡林 《八十抒怀》--- 浏览器上输入URL后回车,到底发生了什么? 1 前言2 解析URL形成http请求3 DNS域名解…