2020-11-20 关于近期学习Python爬虫技术的回忆(仅供作者个人检测学习水平,参考价值低)

得益于Python丰富的包,使用Python的编写爬虫已经是一件非常简单的事情了。事实上,爬虫最困难的并不是如何访问资源,而是如何绕过服务器的反爬虫机制
编写爬虫主要分为三步:

  1. 访问服务器爬取HTML代码
  2. 使用正则表达式等工具分析HTML代码或许需要的信息
  3. 按照自身需求对所分析出的数据进行存贮,分为:文件存储, 数据库存储
    访问服务器:
    python常用包:urllib;urllib3;request

urllib


urllib属于Python标准库,urllib主要注重于url的构建
进行请求

import urllib
'''
当data is not None时, 默认POST访问
'''
req = urllib.request.Request(url=url, data=data, headers=header, method='GET'or'POST')
respnse = urllib.request.urlopen(req)

使用代理

proxy_handler = ProxyHander({
	'http':
	'https':
})
opener = build_opener(proxy_handler)
try:
	response = opener.open(url=url)
	print(response.read().decode('utf-8'))
except URLError as e:
	print(e.reason)

拆分和合并URL

result = urllib.parse(url=url)
其中result包括 scheme, netloc, path, params(参数), query(查询), fragment(信息片断)
urllib.parse(url=url, scheme='', allow_fragment=True or False)
urllib.urlunparse(data) 合并URL 

urllib.urlsplit(url=url, scheme='', allow_fragment=True or False)
使用urlsplit会把path和params合并在一起作为path
urllib.urlunsplit(data)

URLJOIN

urllib.urljoin(base_url='', url)
base_url 只包含 scheme, netloc, path. 当url不是完整url则将url连接到base_url, 如果url完整, 则返回url

URLENCODE

将字典进行编码

编码与解码

urllib.quote(str) # 对字符串进行编码
urllib.unquote(str)# 解码

PARSE_QS

urllib.parse_qs(str) 将多个参数转化为字典
urllib.parse_qsl(str) 将多个参数转化为列表,列表的元素是一个含有2个元素的元组

urllib3


urllib3更注重HTTP访问

http = PoolManager()
reponse = http.request(method='GET'or'POST', url=url, fields={:}, headers=header, timeout= )
data = reponse.data.decode('utf-8')

获取响应头数据

for key in response.info().keys():
	print(response.info()[key])

request


擅长处理cookies

response = request.get(url, params=parsm, headers=header, cookies=cookie, proxies=proxies)
print(response.text)
print(response.content.decode('utf-8'))
response = request.post(url, data=data, headers=header, files=files1)
print(response.text)
print(response.content.decode('utf-8'))

获得cookies

response.cookies

使用Session

session = request.Session()
session.get() 可以与服务器建立会话

构建请求头

# 封装数据
req = Request(method='get'or'post', data=data, headers=header)
# 返回 requests.models.Response 对象
prepare = session.prepare_request(req)
# 发送请求
response = session.send(prepare)
print(response.text)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值