简单爬虫的通用步骤

本文介绍了Python爬虫的基本步骤,包括使用requests库获取数据、火狐浏览器开发者工具的运用、参数设置、提取数据(文字、图片)、处理动态加载内容以及高效抓取策略。讲解了多线程、多进程和分布式爬虫的概念,最后讨论了反爬虫策略,如动态加载、验证码、登录和cookie管理。提供了一些实用技巧和学习资源。
摘要由CSDN通过智能技术生成

本文首发:ZKeeer’s Blog——简单爬虫的通用步骤
多图预警,长文预警
不详细的部分,后面会陆续补充
知识点很多,适合小白,大神绕路
欢迎转载
填坑系列一:简单爬虫的通用步骤——多线程/多进程爬虫示例
填坑系列二:待定
.
.
.

这里写图片描述

1.获取数据

爬虫,就是要千方百计地装成浏览器从网站骗数据。——我说的

1.1从requests.get()说起

最开始一个简单的爬虫就是调用python的requests模块,使用get函数。(为了不祸害别人网站,我以自己的网站为例)

import requests
url_response = requests.get("http://zkeeer.space")
print(url_response.status_code, url_response.text)

这里get函数从给出的URL获取数据,打印出状态码和获取的内容看看。

200 <!DOCTYPE html>
<html lang="zh-CN">
 <head>......

状态码200,说明平稳落地。后面是获取到的网页。

这里要说明一点,url_response.text 和 url_response.content的区别:

.text返回的是Unicode类型,.content返回的是bytes型也就是传说的二进制的数据。当需要的数据是文本时,最好用.text,当你需要下载图片时,要用.content

上面是.text返回的值,下面打印出来.content的值让大家看看。

200 b'<!DOCTYPE html>\r\n<html lang="zh-CN">\r\n <head>

看到前面的小b以及后面赤裸裸的\r\n了么?

我的博客挺简单没有那么大访问量,也不需要限制访问量,也不需要严查你的IP,UserAgent,Cookie等。当你需要大量,高频次访问,而且访问的还是淘宝这样的商业网站,这时候你就需要伪装了,不能只是赤裸裸的用个get加个url,就向网站大喊:“我!浏览器!给数据!” 也就我的博客这么好心给你,淘宝早就会“淘宝不想理你,并向你扔了个大创可贴”。

1.2学会使用火狐浏览器开发者工具

如何伪装一个浏览器?

学习当然都是从模仿开始——也是我说的!

这里使用的是火狐浏览器开发者工具,别听这么高大上,其实就是打开火狐浏览器按F12!

第一步输入网址进入我的博客,http://zkeeer.space 然后按F12,找到网络这一栏。它会提示你重新载入,那就按一下F5,刷新一下。
这里写图片描述

注意以下几栏。然后找到并点开我们需要的,也就是第一个
这里写图片描述

右侧会出来对应的详细信息。包括:消息头,Cookie,参数,响应,耗时,堆栈跟踪。

首先requests.get(url, params=None, **kwargs),下面的顺序按照参数顺序,一一来。

1.3requests.get()参数一:url

消息头这一栏给出的请求方法是GET,即请求时使用requests.get(),如果这里是POST,对应使用requests.post()。get函数的url,即请求头的Host,这里是“zkeeer.space”
这里写图片描述

1.4requests.get()参数二:params
get(url, params=None, **kwargs)中params,是构成网址中一些参数,网址链接“?”后面的那些参数。举个栗子:我的一篇文章链接是http://zkeeer.space/?p=383 那么后面p=383就是get 的参数(当然你也可以直接访问http://zkeeer.space/?p=383,而不需要参数)。

这里写图片描述

需要把这里列举的参数都写到params里面,哪怕是该参数没有值。
那么一开头我们那几行代码就应该这么写了。

import requests

tar_url = "http://zkeeer.space"  # 目标网页
param = {"p": 383}  # 请求头的参数
url_response = requests.get(url=tar_url, params=param)
print(url_response.status_code, url_response.text)

这样获取到的页面就是“zkeeer.space/?p=383”对应的文章了。
这里写图片描述

1.5requests.get()参数三:headers
可能会有疑问,get(url, params=None, **kwargs)并没有headers这个参数啊。这个包含在**kwargs里面,同样还有另一常用的proxies,待会儿会说到。

headers应该写什么呢?下图所示的消息头中的请求头即是这里的headers参数。
这里写图片描述

跟参数一样,需要把请求头的所有信息写入headers(如果网站不查cookie的话,cookie没必要写)。如果对这些参数不了解,可以点击后面对应的详细了解,介绍的很详细。

上面的几行代码又要进

Python爬虫通用代码通常包括以下几个步骤: 1. **导入库**:首先,你需要导入一些基本的库,如`requests`用于发送HTTP请求获取网页内容,`BeautifulSoup`或`lxml`解析HTML文档,以及可能的`re`用于正则表达式处理。 ```python import requests from bs4 import BeautifulSoup ``` 2. **发送请求**:使用`requests.get()`或其他方法(如POST)向目标URL发送请求,并保存响应内容。 ```python url = 'https://example.com' response = requests.get(url) html_content = response.text ``` 3. **解析内容**:通过解析工具(如BeautifulSoup)分析HTML结构,找到需要的数据。 ```python soup = BeautifulSoup(html_content, 'lxml') data_elements = soup.find_all('div', class_='target-class') # 根据实际需求选择标签和属性 ``` 4. **提取数据**:遍历解析后的元素,提取所需信息。 ```python data_list = [] for element in data_elements: data = { 'name': element.find('h2').text, 'value': element.find('p').text } data_list.append(data) ``` 5. **处理数据**:对数据进行清洗、存储或进一步处理,如CSV文件、数据库或JSON格式。 6. **错误处理**:添加适当的异常处理,比如网络连接问题、解析错误等。 ```python try: # 上述步骤... except Exception as e: print(f"抓取失败: {e}") ``` 7. **设置延迟和频率限制**:避免频繁请求导致IP被封禁,可以使用`time.sleep()`设置延时。 8. **封装成函数或模块**:将上述代码组织成模块或函数,方便复用和维护。 ```python def fetch_data(url): # ... 通用爬虫代码 ... if __name__ == '__main__': url = input("请输入要爬取的URL: ") data = fetch_data(url) # 输出或存储数据 ```
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值