爬虫的简单入门

article/2025/9/10 19:15:56

本文旨在教会读者能够简单使用两种爬虫,完成一些基础的爬虫操作,会给出一些优化思路,并不会深入的讲解优化方法。

目录


前言

一、爬虫部分——网页源码获取

1、Requests

2、Selenium

二、数据处理——解析网页

BeautifulSoup

三、成功入门之后的优化

总结


前言

如何安全的爬虫?

大家都在说着爬虫的入门到入狱,让初学的我也心惊胆战

虽然技术本无对错之分,但是在爬虫时还是要遵循爬虫的‘君子’协议来保护自己。

1.解析网站robots.txt规则

2.避开个人隐私信息数据

3.不要影响网站正常运行

4.避免数据的私下买卖

5.控制反爬破解代码传播

6.拒绝商业数据和恶意竞争


“本文默认已经安装requests库、bs4库、selenium库并配置环境”



一、爬虫部分——网页源码获取

1、Requests

常用方法介绍

import requests#发送一个get请求并得到响应
r = requests.get('https://www.baidu.com')#查看响应对象的类型
print(type(r))#查看响应状态码,200为正常访问的值
print(r.status_code)#查看响应的内容
print(r.text)#查看cookies
print(r.cookies)

我们使用get方法时,需要传入一个请求头,否则,默认的请求头会很容易被网站检测到并拒绝访问。

此外,当爬取多个网页时,尽量使用time.sleep()以防止频繁访问而出现错误。

import requestsheader = {"User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (HTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36"}#发送一个get请求并得到响应
r = requests.get(url='https://www.baidu.com', headers=header)print(r.text)
#  现在的r.text即为我们需要处理的网页内容

我们向浏览器发送请求的目的就是得到网页的全部内容,再通过数据处理,将需要的网页内容解析出来最终得到我们需要的数据。


本文只是对requests库的基础使用进行介绍

详细的使用方法可以参考这篇文章 -> requests库的使用(一篇就够了) 

部分运行结果如图所示,可见与我们审查时的网页元素是一致的,但是有些网页爬取下来的内容与我们看到的并不一致,这些网页就属于异步加载的页面,需要我们使用异步爬虫,本文会使用selenium库来实现异步爬取。


2、Selenium

selenium库能模拟浏览器的各种操作,但是速度比较慢

在完成环境配置后,可用如下代码实验是否可用

from selenium import webdriver# 启动Chrome浏览器,如果能成功打开就证明环境配置成功,接下来就可以开始愉快的爬虫了
driver = webdriver.Chrome()

常用方法演示 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 访问百度首页
driver.get("https://www.baidu.com")# 在搜索框中输入关键字
search_box = driver.find_element(By.ID, 'kw')
# 同一标签的定位方法也不一定只有一种,也可以替换成search_box = driver.find_element(By.NAME, "wd")# 在搜索框中输入文本
search_box.send_keys("Python")# 点击搜索按钮
search_button = driver.find_element(By.ID, "su")
search_button.click()# 等待1s让网页加载
time.sleep(1)# 打印当前网页内容
print(driver.page_source)# 10s后关闭浏览器
time.sleep(10)# 关闭浏览器
driver.quit()

 根据检查得到的数据可以帮助我们定位到需要进行操作的位置,但是定位时使用的这些方式,只有id是唯一的,其他的像是name,class,tag都是可能有多个的,因此容易定位不到我们需要的位置上。因此为了更准确的定位,我们选用xpath定位方法。


XPath 是一种在 XML 和 HTML 文档中查找信息的语言。XPath 使用路径表达式来选取文档中的节点或者节点集合。这些路径表达式类似于在文件系统中的路径,可以用来指定文档树中的某个位置或节点。在浏览器中,打开审查,我们可以通过点击某元素右键复制XPath。

import time
from selenium.webdriver.common.by import By
from selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.baidu.com")# 定位到输入框并输入‘python’
driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('Python')# 定位到搜索按钮并点击
driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input').click()# 等待1s响应
time.sleep(1)# 打印当前网页源码
print(driver.page_source)

其中time.sleep(1)目的是让网页在点击后能够响应出内容,否则爬取到的内容不一定是目标内容。

 如果还未进行环境配置或者想要了解更多操作可以参考这篇文章 -> selenium用法详解



二、数据处理——解析网页

数据解析选用BeautifulSoup进行入门

BeautifulSoup则用于解析 HTML 和 XML 文件。它提供了一些方便的方法来遍历、搜索、修改 HTML 和 XML 文件的结构和内容。


BeautifulSoup

from bs4 import BeautifulSoup# text = r.text 或者 text = drive.page_source 这里使用一段网页源码text以便于演示
text = '''
<!DOCTYPE html>
<html>
<head><title>示例表格</title>
</head>
<body><ul><li><a href="http://example.com/page1.html">Page 1</a></li><li><a href="http://example.com/page2.html">Page 2</a></li><li><a href="http://example.com/page3.html">Page 3</a></li></ul><h1>示例表格</h1><table><tr class='sample0'><td>李四</td><td>22</td><td>女</td></tr><tr id='sample1'><td>王五</td><td>25</td><td>男</td></tr></table>
</body>
</html>'''# 对所需处理网页内容进行初始化处理
soup = BeautifulSoup(text, 'html.parser')# 找出text中第一个tr标签的一行内容
data = soup.find('tr')# 找出text中所有tr标签的内容
datas = soup.find_all('tr')print(data)
print('-----------')
# datas中由于是网页里所有带tr标签的行,因此可以遍历datas的每一行
for s in datas:print(s)
print('-----------')# 在定位时,并不是只有tag标签,还有id,name,calss,style等等。其中id为唯一的,是最准确的定位方式,需要注意的是,为了与python关键词区分开,class后面要加一个'_',如下
print(soup.find_all('tr',class_='sample0'))
print('-----------')
print(soup.find_all('tr',id='sample1'))
print('-----------')# get_text()方法用于获取标签内的文本内容
print(data.get_text())
for s in datas:print(s.get_text())print('-----------')# 链接的获取
urls = soup.find_all('a')
for url in urls:print(url['href'])

soup 中'html.parser'为 解析器,简单了解即可 -> BeautifulSoup解析器及区别

 输出结果

<tr class="sample0">
<td>李四</td>
<td>22</td>
<td>女</td>
</tr>
-----------
<tr class="sample0">
<td>李四</td>
<td>22</td>
<td>女</td>
</tr>
<tr id="sample1">
<td>王五</td>
<td>25</td>
<td>男</td>
</tr>
-----------
[<tr class="sample0">
<td>李四</td>
<td>22</td>
<td>女</td>
</tr>]
-----------
[<tr id="sample1">
<td>王五</td>
<td>25</td>
<td>男</td>
</tr>]
-----------
李四
22
女
李四
22
女
王五
25
男
-----------
http://example.com/page1.html
http://example.com/page2.html
http://example.com/page3.html

这里只是给出了一段源码进行演示,大家可以关联上爬虫部分,对一些网页进行数据处理。

import requests
from bs4 import BeautifulSoupheader = {"User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (HTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36"}r = requests.get(url='https://www.baidu.com', headers=header)
print(r.text)soup = BeautifulSoup(r.text, 'html.parser')'''
code_part
这样串联起来即可对网页中所需要数据进行爬取,这样我们就得到了一个完整的爬虫
'''

即使得到了数据,也还是需要我们进行数据整理,可以用xlsxwriter库做excel表格文件或者以csv等形式保存,然后再对数据进行后续的处理。

三、成功入门之后的优化

1、目前很火的httpx+parsel

2、高效便捷的pyppeter

3、爬取速度可以采用多线程、分布式爬虫加快爬取速度,但是注意进程数量,不要对服务器造成较大负载。 

4.如果你会正则表达式,搭配xpath能够实现更强大的数据解析功能



 总结

以上就是本文的全部内容,本文仅仅简单介绍了两种基础爬虫的使用和简单的数据处理方法,而进一步的优化可以用提供的思路继续学习。如有错误之处还请大家多多指正。


http://chatgpt.dhexx.cn/article/Q4fDw8fP.shtml

相关文章

网页爬虫教程

转自https://morvanzhou.github.io/tutorials/data-manipulation/scraping/ 了解网页结构 学习爬虫, 首先要懂的是网页. 支撑起各种光鲜亮丽的网页的不是别的, 全都是一些代码. 这种代码我们称之为 HTML, HTML 是一种浏览器(Chrome, Safari, IE, Firefox等)看得懂的语言, 浏览…

一个简单的爬虫入门教程!

前言 我毕业论文要写文本大数据情绪分析&#xff0c;没有现成的数据。淘宝要价600块我又舍不得&#xff0c;只能自学爬虫。我一点计算机网络的基础都没有&#xff0c;光是入门就花了一周&#xff08;不知道从何下手&#xff09;&#xff0c;所幸爬虫不难&#xff0c;只要见过就…

【爬虫教程】吐血整理,最详细的爬虫入门教程~

初识爬虫 学习爬虫之前&#xff0c;我们首先得了解什么是爬虫。 来自于百度百科的解释&#xff1a; 网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&a…

爬虫教程( 1 ) --- 初级、基础、实践

爬虫教程&#xff1a;https://piaosanlang.gitbooks.io/spiders/content/ 1. 爬虫入门 初级篇 IDE 选择&#xff1a; PyCharm (推荐) 、SublimeText3、Visual Studio Python 版本&#xff1a;Python3。&#xff08; 最简单的是直接安装 Anaconda&#xff0c;使用 Anaconda 管理…

python 爬虫 简单爬虫教程(requests + selenium )

最近改了实验室之前的爬虫&#xff0c;感觉有些生疏了&#xff0c;故此记录一下&#xff0c; 我将会通过抓取网站 https://nonfungible.com/ 来进行讲解。 目录 requests Chrome 浏览器使用Chrome 对目标网站信息进行解析requests get 请求requests 添加头requests ip代理 使用…

如何自学Python爬虫?详细的从入门到精通Python爬虫技能教程来了

如何自学Python爬虫&#xff1f;在大家自学爬虫之前要解决两个常见的问题&#xff0c;一是爬虫到底是什么&#xff1f;二是问什么要用Python来做爬虫&#xff1f;爬虫其实就是自动抓取页面信息的网络机器人&#xff0c;至于用Python做爬虫的原因&#xff0c;当然还是为了方便。…

Python爬虫入门教程:超级简单的Python爬虫教程

这是一篇详细介绍 [Python] 爬虫入门的教程&#xff0c;从实战出发&#xff0c;适合初学者。读者只需在阅读过程紧跟文章思路&#xff0c;理清相应的实现代码&#xff0c;30 分钟即可学会编写简单的 Python 爬虫。 这篇 Python 爬虫教程主要讲解以下 5 部分内容&#xff1a; …

python超简单爬虫教程

python超简单爬虫教程 python超简单爬虫教程七大步骤&#xff1a;1发送数据请求2请求网站源码3数据筛选4存储数据5数据可视化6数据分析7公司决策 python超简单爬虫教程 大家好&#xff01;在这里给大家交流一下小编总结得python超简单爬虫教程&#xff0c;废话不多说&#xff…

如何入门 Python 爬虫?详细教程在这里

根据本人的习惯与理解&#xff0c;用最简洁的表述&#xff0c;介绍爬虫的定义、组成部分、爬取流程&#xff0c;并讲解示例代码。 基础 爬虫的定义&#xff1a;定向抓取互联网内容&#xff08;大部分为网页&#xff09;、并进行自动化数据处理的程序。主要用于对松散的海量信…

爬虫入门教程 —— 1

爬虫入门教程 -1 很想做一些爬虫的基础性的教程&#xff0c;来与大家共同分享我的一些小经验&#xff0c; 我将以我认为的方式为大家讲解网络爬虫&#xff0c;如果你没有编程基础&#xff0c;对网络爬虫有兴趣&#xff0c;开始可能稍微有一些小难度&#xff0c;不过我希望能给…

Python爬虫简单入门教程

这篇 Python 爬虫教程主要讲解以下 5 部分 了解网页结构&#xff1b;使用 requests 库抓取网站数据&#xff1b;使用 Beautiful Soup 解析网页&#xff1b;清洗和组织数据&#xff1b;爬虫攻防战&#xff1b; 了解网页结构 网页一般由三部分组成&#xff0c;分别是 HTML&#…

Python网络爬虫使用教程

文章目录 一、URL资源抓取1.urllib2.requests3.requests-html二、正则表达式三、数据解析1.Beautiful Soup2.lxml3.selectolax四、自动化爬虫selenium五、爬虫框架1.Scrapy2.pyspider框架六、模拟登录与验证码识别七、autoscraper&#xff08;不需要编程基础&#xff09; 一、U…

爬虫入门教程

文章目录 前言一、学习爬虫前所需掌握的内容二、爬取数据2.1 如何存储数据2.2 获取html网络数据2.3 获取json网络数据2.4 获取图片数据 三、提取数据3.1 提取百度热搜信息3.2 提取豆瓣同城近期活动信息 前言 第一次接触爬虫&#xff0c;这篇博客用于记录学习的过程&#xff0c…

「爬虫教程」吐血整理,最详细的爬虫入门教程

初识爬虫 学习爬虫之前&#xff0c;我们首先得了解什么是爬虫。来自于百度百科的解释&#xff1a; 网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&…

Python爬虫之入门保姆级教程,学不会我去你家刷厕所

注重版权&#xff0c;转载请注明原作者和原文链接作者&#xff1a;Bald programmer 今天这个教程采用最简单的爬虫方法&#xff0c;适合小白新手入门&#xff0c;代码不复杂 文章目录 今天这个教程采用最简单的爬虫方法&#xff0c;适合小白新手入门&#xff0c;代码不复杂首先…

Java单元测试使用mock【转载】

1、什么是Mock? mock是在测试过程中&#xff0c;对于一些不容易构造/获取的对象&#xff0c;创建一个mock对象来模拟对象的行为。比如说你需要调用B服务&#xff0c;可是B服务还没有开发完成&#xff0c;那么你就可以将调用B服务的那部分给Mock掉&#xff0c;并编写你想要的返…

Java代码实现单元测试

单元测试&#xff1a;在编写java代码的时候&#xff0c;如果我们想去运行一个Java程序&#xff0c;那么必须创建一个main方法&#xff0c;但这样比较麻烦 比如现在我们想去测试HDFS的JavaAPI的文件上传和文件下载功能 如果使用main方法的话&#xff0c;那么我们需要创建两个J…

java单元测试(@Test)

初学者在写java代码的时候&#xff0c;可能会因为写一个小功能就要写一个类&#xff0c;写一个main方法而苦恼。其实java的工程师在很早的时候就提供了解决的方案。就是我们今天要讲 的Junit测试。 在使用的时候首先需要配置环境&#xff1a; 一、英文&#xff1a; 选中一个…

java单元测试方法的使用

单元测试方法的使用 java单元测试是最小的功能单位测试代码&#xff0c;我们在编写大型程序的时候&#xff0c;需要写成千上万个方法或函数&#xff0c;这些函数的功能可能很强大&#xff0c;但我们在程序中只用到该函数的一小部分功能&#xff0c;如果想要测试这些方法函数的…

java单元测试的编写及运行方法

java单元测试的方法 1、为什么要进行单元测试 因为单元测试相当于测试的某个功能点&#xff0c;不是针对整个业务进行的测试&#xff0c;例如如果只想调试某个类下的功能&#xff0c;但又想把多个类写在一个java文件里&#xff0c;就可以采用单元测试的方法 2、怎么创建及运…