网络库
在学习爬虫过程中,我们需要了解三种基本的网络库。
- urllib
- urllib3
- requests
一、urllib网络库
urllib包含四个模块
1、request:最基本的HTTP请求模块,可以用来发送HTTP请求,并接受服务端的响应数据。
2、error:异常处理模块。
3、parse:工具模块,提供了很多处理URL的API,如拆分、解析、合并等
4、robotparser:主要用来识别网站的robots文件,然后判断哪些网站可以抓取,哪些不能抓取
from urllib import request
#前者是解码,后者是编码
from urllib.parse import unquote,urlencode
#导入异常
import urllib.error
url = 'http://httpbin.org/post'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Host':'httpbin.org',
#设置中文请求头,需要对中文进行编码,否则抛出异常
'Chinese':urlencode({'name':'李宁'}),
}
#使用try...except语句来捕捉异常
try:
res = request.Request(url = url,headers=headers,method='POST')
response = request.urlopen(res)
except urllib.error.URLError as e:
print(e)
value = response.read().decode('utf-8')
print(value)
import json
#将返回值转换成json格式
responseObj = json.loads(value)
#对中文进行解码
print(unquote(responseObj['headers']['Chinese']))
结果
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept-Encoding": "identity",
"Chinese": "name=%E6%9D%8E%E5%AE%81",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-65a6140e-01aabf6d3de5c429217fa5d5"
},
"json": null,
"origin": "171.41.72.7",
"url": "http://httpbin.org/post"
}
name=李宁
二、代理的使用
在使用爬虫时,往往会遇到许多的反爬技术,其中之一就是通过客户端的IP鉴别是否为爬虫。如果同一个IP在短时间内大量访问服务器的不同页面,那么既有可能是爬虫,并且很有可能对客户端的IP临时或永久禁用。这样,我们就不能在访问任何网页的内容。所以在使用爬虫获取资源时,我们需要使用代理IP,这个IP我们需要通过网站进行购买,购买后,一般会提供如何使用该代理IP的方法,以及代码,可以直复制,然后改变一些值就可以使用。
三、网络库urllib3
urllib主要侧重于URL的请求构造。而urllib3则是服务于升级的HTTP1.1,并且拥有高效的HTTP连接池管理及HTTP代理服务的功能库。
在这里,其实urllib3与urllib也没有很大的区别,主要区别在如下代码:
from urllib3 import *
#调用disable_warning函数可以阻止显示警告消息
disable_warnings()
#创建PoolManager类的实例
http = PoolManager()
#但需要设置请求时间,可以在连接池里加上这个参数timeout=Timeout(connect=2.0,read=2.0)
#获取响应数据时
response = http.request('GET',url)
#但需要再请求头后面加参数,可以使用fields属性
四、网络库requests
1、GET请求
向服务端发送GET请求,要想为GET请求指定参数,可以直接在URL后面加,用问号(?)分隔,不过还有另外一种更好的方式,就是使用GET方法的params参数,该参数需要时一个字典类型的值。
2、POST请求
想GET请求一样,在向服务端发送POST请求时,需要指定data参数,也是一个字典值。
3、二进制数据
在使用网络库requests时,使用GET方法指定的不仅可以是网页,还可以是任何二进制文件。
4、处理cookie
在访问某些网站时,只有登录用户才能获得正常显示的内容,所以一般的做法是先在网页上登录。
这个爬虫程序我使用的是Beautiful Soup库解析数据的,后续将会对这个库做详细的解释
接下来将爬取百度贴吧的内容 ,URL:https://tieba.baidu.com/
#该网站我获取的主要资源是体育频道里的一些地址和网站名称
import requests
#导入BeautifulSoup库
from bs4 import BeautifulSoup
class TieBaSpider:
def __init__(self):
self.headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
}
def get_html(self):
for i in range(1,9):
url = f'https://tieba.baidu.com/f/index/forumpark?pcn=%E4%BD%93%E8%82%B2%E8%BF%B7&pci=275&ct=0&rn=20&pn={i}'
response = requests.get(url,headers=self.headers)
if response.status_code == 200:
html = response.text
self.parse_html(html)
#在解析函数里使用了bs4里的解析方法
def parse_html(self,html):
soup = BeautifulSoup(html,'lxml')
app_href_list = soup.find_all(class_='ba_href clearfix')
app_title_list = soup.find_all(class_='ba_name')
app_src_list = soup.find_all(class_='ba_pic')
for app_href,app_title,app_src in zip(app_href_list,app_title_list,app_src_list):
#这里对爬取到的数据进行了拼接,使得成为一个完整的URL
herfs = 'https://tieba.baidu.com'+app_href['href']
print(herfs)
#这里使用了一些方法获取属性值,后续会进行讲解
print(app_title.string)
print(app_src['src'])
if __name__ == '__main__':
teiba = TieBaSpider()
teiba.get_html()
https://tieba.baidu.com/f?kw=nba
nba吧
https://imgsa.baidu.com/forum/pic/item/9825bc315c6034a8c0ae628cc41349540923766b.jpg
https://tieba.baidu.com/f?kw=%E6%9B%BC%E8%81%94
曼联吧
https://imgsa.baidu.com/forum/pic/item/e4e49e510fb30f244192995ece95d143ac4b03cb.jpg
https://tieba.baidu.com/f?kw=%E7%A7%91%E6%AF%94
科比吧
https://tiebapic.baidu.com/forum/w%3D120%3Bh%3D120/sign=23790e19b424b899de3c7d3a5e3d75a8/adaf2edda3cc7cd9865110c06401213fb80e91ae.jpg?tbpicau=2024-01-18-05_af189dfda60f8cf673e8c6ce0e3af706
https://tieba.baidu.com/f?kw=%E7%9A%87%E5%AE%B6%E9%A9%AC%E5%BE%B7%E9%87%8C
皇家马德里吧
https://tiebapic.baidu.com/forum/w%3D120%3Bh%3D120/sign=598b8815b9039245a1b5e50db7afccff/562c11dfa9ec8a13f9622938b203918fa1ecc0ea.jpg?tbpicau=2024-01-18-05_6a447a21800c70adb9d7f4279325a23b
https://tieba.baidu.com/f?kw=%E5%B7%B4%E5%A1%9E%E7%BD%97%E9%82%A3
巴塞罗那吧
https://tiebapic.baidu.com/forum/w%3D120%3Bh%3D120/sign=deebd911beedab64747249c2c70dc7fe/d8f9d72a6059252daecebade719b033b5ab5b90b.jpg?tbpicau=2024-01-18-05_c9f0efa81d93d68b5e858d05edc853d3
https://tieba.baidu.com/f?kw=%E5%88%87%E5%B0%94%E8%A5%BF
切尔西吧
https://imgsa.baidu.com/forum/pic/item/a8773912b31bb05139b8c411317adab44aede06f.jpg
标签:baidu,tieba,app,网络,urllib,https,com
From: https://www.cnblogs.com/wjx-2005-07-01/p/17967967