在当今信息爆炸的时代,互联网上蕴藏着海量的数据,而Python作为一门功能强大且易于学习的编程语言,为我们提供了强大的工具和库,使得我们能够轻松地从网络上抓取数据。本文将介绍Python爬虫的基本概念、常用的爬虫库和一些实用的爬虫技巧,帮助您快速入门并掌握爬虫技术。
一、什么是爬虫?
爬虫(Spider)是一种自动化程序,通过模拟人类对网页的访问行为,从网页中抓取所需的数据并进行处理。它可以遍历网页上的链接,获取页面内容、图片、视频等各种形式的数据,甚至可以进行数据的清洗和分析。
二、Python爬虫常用的库
1、Requests库
Requests是一个简单而优雅的HTTP库,用于发送HTTP请求和处理响应。它提供了简洁的API,使得与Web服务进行交互变得非常容易。可以使用Requests库发送GET、POST、PUT等各种类型的请求,并处理响应的状态码、头信息和内容。
import requests
response = requests.get("https://www.example.com")
print(response.text)
例子
'''
获取响应内容
r.text是服务器响应的内容,会自动根据响应头部的字符编码进行解码
r.encoding是服务器内容使用的文本编码
r.status_code是用于检测响应的状态码,如果返回200,表示请求成功;
如果返回4xx,表示客户端错误;返回5xx,表示服务器响应错误
r.content是字节方式的响应体,会自动解码gzip,和deflate编码的响应数据
r.json()是Requests中内置的JSON解码器
'''
import requests
r = requests.get('http://www.santostang.com/')
print("文本编码:",r.encoding)
print("响应状态码:",r.status_code)
print("字符串方式的响应体:",r.text)
'''
定制requests
有些网页需要对requests的参数进行设置才能获取需要的数据,包括传递URL参数,定制请求头
发送POST请求,设置超时等。
'''
'''
传递URL参数
'''
import requests
key_dict = {
'key1':'value1','key2':'value2'}
r = requests.get('http://httpbin.org/get',params=key_dict)
print("URL已经正确编码:",r.url)
print("字符串方式的响应体:\n",r.text)
'''
发送POST请求
除了GET请求外,有时还需要发送一些编码为表单形式的数据,如在登入的时候请求就为POST,
因为如果用GET请求,密码就会显示在URL中,这是非常不安全的;
要实现POST请求,只需要简单地传递一个字典给Requests中的data参数,这个数据字典就会在发出请求的时候
自动编码为表单形式。
'''
import requests
key_dict = {
'key1': 'value1', 'key2': 'value2'}
r = requests.post('http://httpbin.org/post', data=key_dict)
print(r.text)
'''
超时:有时爬虫会遇到服务器长时间不返回,这时爬虫程序就会一直等待,造成程序没有顺利执行。
可以利用Requests在timeout参数设定的秒数结束之后停止等待响应
'''
import requests
link='http://www.santostang.com/'
r=requests.get(link,timeout=0.001)
import requests
if __name__ == "__main__":
# UA伪装
headers = {
'user-agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / '
'94.0.4606.54Safari / 537.36 '
}
# 处理url
url = 'https://www.baidu.com/'
kw = input("input a keyword:") # 方便输入任何一个东西进行查找
param = {
'wd': kw
}
# 发送请求
r = requests.get(url=url, headers=headers, params=param)
page_text = r.text
print(page_text)
import requests
import json
if __name__ == "__main__":
url = ''
headers = {
'user-agent'