python爬虫笔记,urllib.request模块的运用方法

1. urllib.request模块
1.1 版本
python2 :urllib2、urllib
python3 :把urllib和urllib2合并,urllib.request
1.2 常用的方法
urllib.request.urlopen(" 网址") 作 :向网 站发起 一个请求并 获取响应
字节流 = response.read()
字符串 = response.read().decode("utf-8")
urllib.request.Request" 网址",headers="字典") urlopen()不 支持重构 User-Agent

1.3 响应对象
read()  读取服务器响应的内容
getcode() 返回HTTP的响应码
geturl()  返回实际数据的URL(防止重定向问题)
2.	urllib.parse模块
2.1 常用方法
urlencode(字典)
quote(字符串) (这个里面的参数是个字符串)
3.请求方式
GET 特点 :查询参数在URL地址中显示
POST
在Request 法中添加data参数 
urllib.request.Request(url,data=data,headers=headers) 
data :表单数据以bytes类型提交,不能是str

4. requests模块
4.1 安装
pip install requests
 在开发 工具中安装
4.2 request常用方法
requests.get(	网址)
4.3 响应对象response的方法
response.text 返回unicode格式的数据(str)
response.content 返回字节流数据(	二进制)
response.content.decode('utf-8')	手动进行解码
response.url  返回url
response.encode() = ‘编码’
4.4 requests模块发送 POST请求
4.5 requests设置代理
使 requests添加代理只需要在请求 方法中(get/post)传递proxies参数就可以了
 代理网站
西刺免费代理IP:http://www.xicidaili.com/
快代理:http://www.kuaidaili.com/
代理云:http://www.dailiyun.com/
4.6 cookie
cookie :通过在客户端记录的信息确定	用户身份
HTTP是一 种 无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下 次请求时,服务器会认为是 个新的客户端,为了维护他们之间的连接,让服务器知道这是前一 个 户发起的请求,必须在 一 个地方 保存客户端信息。
4.7 session
session :通过在服务端记录的信息确定用户身份 这里 这个session就是 一个指
的是会话
4.8 处理不信任的SSL证书
什么是SSL证书?
 SSL证书是数字证书的 一种,类似于驾驶证、护照和营业执照的电 副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能

5. requests 模块源码分析


以下是代码部分
import urllib.request
# response 是响应对象
response = urllib.request.urlopen('https://qq.yh31.com/zjbq/2920180.html')

# read()把相应对象里面的内容读取出来
html = response.read().decode('utf-8')
print(type(html),html)

# encode() 字符串--> bytes数据类型
# decode() bytes数据类型 --> 字符串
----------------------------------------------------------------
import urllib.parse

name = {'wd':'海贼王'}

name = urllib.parse.urlencode(name)

print(name)
--------------------------------------------------------------------------
import urllib.request
import urllib.parse
baseurl = 'https://www.baidu.com/s?wd='

name = input('请输入搜索内容:')

name = urllib.parse.quote(name)

url = baseurl + name

print(url)
---------------------------------------------------

import urllib.request

url = 'http://www.baidu.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

# 1.创建请求对象
req = urllib.request.Request(url,headers=headers)
# 2.获取相应对象
response = urllib.request.urlopen(req)
# 3.读取响应对象内容 read().decode('utf-8')
html = response.read().decode('utf-8')

# print(html)

# print(response.getcode()) # 返回状态码
print(response.geturl()) # 返回实际给我们数据的url

# 使用流程
# 1.利用Request()方法构建请求对象
# 2.利用urlopen()方法获取响应对象
# 3.利用响应对象中的read().decode('utf-8')中的内容
--------------------------------------------------------------------
import random
import urllib.request
import urllib.parse
# 需求:输入要爬取贴吧的名称,在输入爬取的起始页和终止页,把每一页保存到本地

# 分析:1.找url的规律
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=0 第一页
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=50第二页
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=100 第三页
# 页数的规律 pn = (当前页数 - 1)*50
# 2.获取网页的内容
# 3.保存数据

import random
import urllib.request
import urllib.parse

# 随机获取一个ua
headers_list = [{ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'},{'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'}]

headers = random.choice(headers_list)

name = input('请输入贴吧名:')

start = int(input('请输入起始页:'))

end = int(input('请输入结束页:'))

# 对贴吧name进行编码
kw = {'kw':name}

kw = urllib.parse.urlencode(kw)

# 拼接url 发请求 或响应 保存数据

for i in range(start,end+1):

    # 拼接url
    pn = (i - 1)*50
    baseurl = 'https://tieba.baidu.com/f?'

    url = baseurl + kw + '&pn=' + str(pn)


    # 发起请求
    req = urllib.request.Request(url,headers=headers)

    # print(url)
    res = urllib.request.urlopen(req)

    html = res.read().decode('utf-8')


    # 写入文件
    filename = '第' + str(i) + '页.html'

    with open(filename,'w',encoding='utf-8') as f:

        print('正在爬取第%d页'%i)
        f.write(html)
-----------------------------------

# 请输入你要搜索的内容 :美女 保存到本地文件 美女.html

import urllib.request
import urllib.parse

# https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B

# 拼接url

baseurl = 'https://www.baidu.com/s?'

name = input('请输入你要搜索的内容:')

# 进行urlencode()编码
wd = {'wd':name}

name = urllib.parse.urlencode(wd)

url = baseurl + name

# print(url)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36','Cookie':'BIDUPSID=4FA733ACE6D4F90A52D99F5F363CD85A; PSTM=1576929032; sug=3; sugstore=0; ORIGIN=0; bdime=0; BAIDUID=4FA733ACE6D4F90A83BE743C46630339:SL=0:NR=10:FG=1; BD_UPN=12314753; BDUSS=VFPUlFGU0RER1ZtcDdTR1lPek5vcEdZcUMtRFNNUkN3VHZTb35Cb1hRR0duOHRlRVFBQUFBJCQAAAAAAAAAAAEAAADzvSajSjdnaGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYSpF6GEqReR; MCITY=-158%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=; H_PS_645EC=9e896%2FhdaWy7uBsYfIeQKxjhCoWB1I56kSiZk45G7DyeSZsVpqa6Fx3Np2k; COOKIE_SESSION=3052_0_9_9_86_16_0_0_9_8_15_0_0_0_10_0_1588076550_0_1588079592%7C9%235669_143_1586614174%7C9'
}
# 创建请求对象
req = urllib.request.Request(url,headers=headers)

# 获取响应对象
res = urllib.request.urlopen(req)
# 读取响应对象内容
html = res.read().decode('utf-8')

# 写入文件
with open('结果.html','w',encoding='utf-8') as f:

    f.write(html)
----------------------------------------

data = {
    'i': '你好',
    'from': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '15880623642174',
    'sign': 'c6c2e897040e6cbde00cd04589e71d4e',
    'ts': '1588062364217',
    'bv': '42160534cfa82a6884077598362bbc9d',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom':'fanyi.web',
    'action': 'FY_BY_CLICKBUTTION'

}


# https://www.baidu.com/s?wd=%E5%A6%B9%E5%AD%90



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章