python3中使用urllib进行https请求

python3中使用urllib进行https请求,第1张

刚入门python学习网络爬虫基础,我辩毁使用的python版本是python3.6.4,学习的教程参考 Python爬虫入门教程

python3.6的版本已经没有urllib2这个库了,所以我也不需要纠结信判urllib和urllib2的区别和应用场景

参考这篇官方文档 HOWTO Fetch Internet Resources Using The urllib Package 。关于http(s)请求一般就get和post两种方式较为常用,所以写了以下两个小demo,url链接随便找的,具体场景具体变化,可参考注释中的基本思路

POST请求:

GET请求:

注意,

使用ssl创建未经验证的上下文,在urlopen中需传入上下文参数

urllib.request.urlopen(full_url, context=context)

这是Python 升级到 2.7.9 之后引入的一个新特性,所以在使用urlopen打开https链接会遇到如下报错:

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)

所以,当使滑灶改用urllib.urlopen打开一个 https 链接时,需要先验证一次 SSL 证书

context = ssl._create_unverified_context()

或者或者导入ssl时关闭证书验证

ssl._create_default_https_context =ssl._create_unverified_context

爬虫的请求方式常用的有urllib和requests,前者是自带模块,后者需要我们自己进行安装。

安装requests模块

注意:在 python2 中,urllib 被分为urllib,urllib2等,在python3中我们直接使用urllib

虽然Python的标罩友梁准库中 urllib 模块告镇已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太物运好,而 Requests 自称 "HTTP for Humans",说明使用更简洁方便。

使用urllib来获取百度首页的源码

get请求参数,如果是中文,需要对中文进行编码,如下面这样,如果不编码会报错。

urlencode应用场景:多个参数的时候。如下

为什么要学习handler?

为什么需要代理?因为有的网站是禁止爬虫的宴薯肆,如果用真实的ip去爬虫,容易被封掉。

2.解析技术

1.安装lxml库

2.导入lxml.etree

3.etree.parse() 解析本地文晌轿件

4.etree.HTML() 服务器响应文件

5.解析获取DOM元素

1.路径查询

2.谓词查询

3.属性查询

4.模糊查询

5.内容查询

6.逻辑运算

示例

JsonPath只能解析本地文件。

pip安装:

jsonpath的使用:

示例:

解析上面的json数据

缺点:效率没有lxml的效率高

优点:接口设计人性化,使用方便

pip install bs4 -i https://pypi.douban.com/simple

from bs4 import BeautifulSoup

1.根据标签名查找节点

soup.a.attrs

2.函数

find(‘a’):只找到第一个a标签

find(‘a’, title=‘名字’)

find(‘a’, class_=‘名字’)

find_all(‘a’) :查找到所有的a

find_all([‘a’手盯, ‘span’]) 返回所有的a和span

find_all(‘a’, limit=2) 只找前两个a

obj.string

obj.get_text()【推荐】

tag.name:获取标签名

tag.attrs:将属性值作为一个字典返回

obj.attrs.get(‘title’)【常用】

obj.get(‘title’)

obj[‘title’]

示例:

使用BeautifulSoup解析上面的html


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12528125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存