前言
什么是爬虫
爬虫是一种自动化工具,用于从互联网或其他计算机网络上获取数据。它可以模拟人的行为,自动访问网页,提取感兴趣的数据,并将其存储到本地计算机或数据库中。爬虫通常用于搜索引擎、数据分析、信息聚合等领域,也被许多企业用于市场调研、竞争分析、用户行为分析等。一些爬虫可能会被用于恶意用途,如扫描漏洞、盗取信息等,因此使用爬虫时应遵守相关法律法规和伦理规范。
爬虫工作的流程图
正文
1. 认识requests模块
urllib是python中请求URL连接的官方标准库,在python2中分为urllib and urllib2,在python3中整合成urllib。requests模块是在urllib3模块基础上进行高度封装,使用更方便,更加人性化。
2.安装requests模块
win+R后输入cmd,之后输入以下的命令即可。
pip install requests
使用pychram的用户:File->Settings->Progect,此界面有加号,可以自行安装
使用anaconda的用户:默认就有了
import requests
3. 发起GET请求
GET请求方法
发送网络请求指的是向一个特定的网络地址或URL,向服务器发送请求,以获取数据或执行操作。网络请求可以包含各种数据和参数,例如用户输入、查询条件、身份验证令牌等。发送网络请求是Web应用程序和移动应用程序等客户端应用程序与服务器端应用程序之间通信的关键步骤。常见的网络请求方法包括GET、POST、PUT、DELETE等。
import requests # 导入requests模块
response = requests.get('http://www.baidu.com')
发送带参数的请求
发送带参数的请求的意义是可以将需要发送的数据以参数的形式传递给服务器,服务器可以根据不同的参数值做出不同的响应。对于不同的业务场景,可以使用不同的参数来控制服务器的行为,例如:
- 在搜索引擎中,可以通过参数来指定搜索关键词、排序方式、分页等信息,以得到不同的搜索结果。
- 在电商网站中,可以通过参数来指定商品类别、价格区间、品牌等信息,以筛选出符合条件的商品。
- 在社交网络中,可以通过参数来指定用户ID、关注列表、粉丝列表等信息,以获取相应的用户信息和社交关系。
import requests # 导入requests模块
payload = {'key1': 'value1', 'key2': 'value2'} # 字符串字典
r = requests.get("http://www.baidu.com/", params=payload)
print(r.url)
payload = {'key1': 'value1', 'key2': ['value2', 'value3']} # 将一个列表作为值传入
r = requests.get('http://www.baidu.com/', params=payload)
print(r.url)
r = requests.get("https://www.baidu.com/s?wd=长春&ie=utf-8&tn=06136131_11_oem_dg")
#百度搜索关键字与“长春”有关的信息
print(r.url)
r = requests.get("https://www.baidu.com/s?wd=北京&ie=utf-8&tn=06136131_11_oem_dg")
print(r.url)
运行结果:
定制请求头headers
请求头是HTTP协议中用于传输请求信息的一部分,它包含了一些关于请求的元数据,如请求类型、请求资源地址、请求参数、请求的来源等。常见的请求头字段包括: User-Agent (浏览器或客户端的身份标识)、Accept(客户端能够接收的MIME类型)、Cookie(请求携带的cookie数据)、Referer(请求前一个页面的地址)、Authorization(身份认证信息)、Content-Type(请求参数的MIME类型)、Content-Length(请求参数的长度)等。
如:User-Agent= ‘Mozilla/5.0 (Windows NT 10.0; WOW64)
import requests # 导入requests模块
url = 'http://www.baidu.com/s?wd=你是我的神'
headers = {
'Content-Type': 'text/html;charset=utf-8',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'
}
r = requests.get(url,headers=headers)
print(r.headers)