风火编程--requests爬虫的使用

requests爬虫

获取response

import request
request.get(url=url, headers={
"User-Agent":"Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1"})

解析数据

from lxml import etree
item = {}
html = etree.HTML(response.text)
title = html.xpath('//h4//text()')
if title:
    item['title'] = title[0]
deail_url = html.xpath('//h4/a/@href')
if detail_url:
    item["url"] = url[0]

登录并存储cookie

import requests

sess = requests.Session()
# 提交用户名密码数据登录并记录cookie, 不进行安全忽略证书(https)
response = sess.post(url, data=login_data, headers=headers, verify=False)
 response = sess.get(link, headers=headers)

常见问题

  1. 使用隧道类型的代理,不能处理需要重定向的url请求, 应直接请求目标url

屏蔽HTTPS警告

在配置文件或启动文件头部运行以下代码

# 版本一
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# 版本二
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

SSLError解决

from requests_toolbelt import SSLAdapter
adapter = SSLAdapter('TLSv1')
s = requests.Session()  # 每次请求添加
s.mount('https://', adapter)

post请求参数

post请求的数据参数有两种
data={dict}
json='str’或者{dict}
如果在post请求头声明了
‘content-type’: ‘application/json’
则且使用json={dict}
则后台使用request.json()直接得到{dict}
如果在headers中声明了
“content-type”: “application/x-www-form-urlencoded”
则只能用json传递字符串
字符串是通过url编码的{dict}

import urllib.parse
data = {k: urllib.parse.unquote(v) if "%" in v else v for k, v in data.items()}
u = urllib.parse.urlencode(data)

在编码之前英注意查看是否有已经编码的字段, 否则会二次编码导致数据错误

使用socks5代理

proxy = 'socks5://ip:port'
proxies = {'http': proxy, 'https': proxy}
resp = requests.get(url, proxies=proxies, ...)

出现异常先升级一下socks

pip install -U requests[socks]

br算法解压缩
content = brotli.decompress(resp.content)
text = content.decode(“utf-8”)

解决304缓存问题
请求头中设置

'If-None-Natch': '',
'If-Modified-Since': '',

requests.exceptions.ProxyError问题

os.environ['NO_PROXY'] = 'stackoverflow.com'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值