首页 > 编程语言 > 详细

python爬虫笔记

时间:2020-02-04 09:45:07      阅读:76      评论:0      收藏:0      [点我收藏+]

1.urllib库中request,parse的学习

1.1 简单的请求页面获取,并下载到本地 request的使用

from urllib import request

# 获取此网页的demout
resp = request.urlopen(http://www.baidu.com)

# 读出10个字符
# 结果为 b‘<!DOCTYPE ‘  b代表bytes 是一个字节流
# ‘<!DOCTYPE ‘ 包括空格 正好十个字符
# print(resp.read(10))

# 读取一行
# 结果为 b‘<!DOCTYPE html>\n‘
# \n 代表换行
# ()里面可以写读几行
# print(resp.readline())

# 全部读取  二者对应的返回类型不同
# <class ‘list‘> readlines
# <class ‘bytes‘> read
# print(type(resp.readlines()))
# print(type(resp.read()))


# 下载到本地文件夹 
request.urlretrieve(http://www.baidu.com, baidu.html)

1.2 parse的使用

1.2.1 解决中文与码的对应问题

例:中文变成码 name=%E9%AB%98%E8%BE%BE 这些带%和中文之间的转换

 1 # 主要解决网址中中文是解析不了的问题
 2 
 3 from urllib import request
 4 from urllib import parse
 5 
 6 # 中文变成码 name=%E9%AB%98%E8%BE%BE&age=21
 7 
 8 # urlencode函数 把字典转化为字符串
 9 params = {name: 高达, age: 21}
10 result = parse.urlencode(params)
11 # 结果为
12 # <class ‘str‘>
13 # name=%E9%AB%98%E8%BE%BE&age=21
14 print(type(result))
15 print(result)
16 
17 # 如果直接在网址写中文会报错,虽然我们看到的是中文但是实际上是中文对应的码
18 # resp = request.urlopen(‘https://www.baidu.com/s?wd=刘德华‘)
19 
20 
21 # 写出一个字典
22 params = {wd: 刘德华}
23 print(params)
24 # 转化成正确的网站上的格式
25 qs = parse.urlencode(params)
26 print(qs)
27 # 这样请求就能成功
28 resp = request.urlopen(https://www.baidu.com/s?+qs)
29 # print(resp.readlines())
30 # parse.parse_qs函数 还原解码
31 result = parse.parse_qs(qs)
32 # 结果为
33 # <class ‘dict‘>
34 # {‘wd‘: [‘刘德华‘]}
35 print(type(result))
36 print(result)

1.2.2 解析网址

# 解析网址
from urllib import parse


def test():
    # 测试用的 url
    url = http://www.baidu.com/s;sssas?wd=python&username=abc#1
    url1 = http://www.baidu.com/s?wd=python&username=abc#1
    url2 = https://api.bilibili.com/x/v2/reply?callback=jQuery17204184039578913048_1580701507886&jsonp=jsonp&pn=1&type=1&oid=70059391&sort=2&_=1580701510617
    result1 = parse.urlparse(url)
    # <class ‘urllib.parse.ParseResult‘>
    print(type(result1))
    # 结果为 ParseResult(scheme=‘http‘, netloc=‘www.baidu.com‘, path=‘/s‘, params=‘sssas‘, query=‘wd=python&username=abc‘,
    # fragment=‘1‘)
    # print(result1)
    # print(‘scheme:‘, result1.scheme)
    # print(‘netloc:‘, result1.netloc)
    # print(‘path: ‘, result1.path)
    # print(‘params: ‘, result1.params)
    # print(‘query: ‘, result1.query)
    # print(‘fragment: ‘, result1.fragment)
    result2 = parse.urlsplit(url)
    print(result2)
    # urlparse函数与 urlsplit函数的对比
    # urlparse函数多一个params
    result1 = parse.urlparse(url1)
    result2 = parse.urlsplit(url1)
    print(result1)
    print(result2)
    # result3 = parse.urlparse(url2)
    # print(‘r3:‘, result3.query)


# 格式化输出函数
def myself_urlparse(url):
    result = parse.urlparse(url)
    print(scheme:, result.scheme)
    print(netloc:, result.netloc)
    print(path: , result.path)
    print(params: , result.params)
    print(query: , result.query)
    print(fragment: , result.fragment)


def myself_urlsplit(url):
    result = parse.urlsplit(url)
    print(scheme:, result.scheme)
    print(netloc:, result.netloc)
    print(path: , result.path)
    print(query: , result.query)
    print(fragment: , result.fragment)


if __name__ == __main__:
    test()

 

python爬虫笔记

原文:https://www.cnblogs.com/gonT-iL-evoL-I/p/12258171.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!