标签:读取 sch 中文参数 timeout 允许 otf cap col pre
目录
python内置的http请求库
官方文档:https://docs.python.org/3/library/urllib.html
一个web测试网站:http://httpbin.org
发送请求
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
封装请求,得到请求对象,传给urlopen,请求对象属性和方法文档:https://docs.python.org/3/library/urllib.request.html#request-objects
request = urllib.request.Request(‘https://python.org‘)
response = urllib.request.urlopen(request)
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
利用Handler来构建Opener,Opener可以使用open()方法,返回response.提供了高级的操作(比如Cookies处理、代理设置等)
BaseHandler类,它是所有其他Handler的父类,它提供了最基本的方法,例如default_open()、protocol_request()
验证页面(用户名和密码)
from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
from urllib.error import URLError
username = ‘username‘
password = ‘password‘
url = ‘http://localhost:5000/‘
p = HTTPPasswordMgrWithDefaultRealm()
p.add_password(None, url, username, password)
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler) # 用handle构建opener
try:
result = opener.open(url)
html = result.read().decode(‘utf-8‘)
print(html)
except URLError as e:
print(e.reason)
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
proxy_handler = ProxyHandler({
‘http‘: ‘http://127.0.0.1:9743‘,
‘https‘: ‘https://127.0.0.1:9743‘
})
opener = build_opener(proxy_handler)
try:
response = opener.open(‘https://www.baidu.com‘)
print(response.read().decode(‘utf-8‘))
except URLError as e:
print(e.reason)
import http.cookiejar, urllib.request
cookie = http.cookiejar.CookieJar() # 直接获取
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open(‘http://www.baidu.com‘)
for item in cookie:
print(item.name+"="+item.value)
filename = ‘cookies.txt‘ # 写入文件
cookie = http.cookiejar.MozillaCookieJar(filename)
# MozillaCookieJar是CookieJar的子类,可以用来处理Cookies和文件相关的事件,比如读取和保存Cookies,可以将Cookies保存成Mozilla型浏览器的Cookies格式.LWPCookieJar会保存成libwww-perl(LWP)格式的Cookies文件。
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open(‘http://www.baidu.com‘)
cookie.save(ignore_discard=True, ignore_expires=True)
cookie = http.cookiejar.LWPCookieJar() # 从文件中读取并利用cookie
cookie.load(‘cookies.txt‘, ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open(‘http://www.baidu.com‘)
print(response.read().decode(‘utf-8‘))
是http.client.HTTPResponse类的实例
继承自OSError类,是error异常模块的基类
URLError的子类,专门用来处理HTTP请求错误
url解析模块,将url字符串拆分到其组件中,或者将url组件合并到url字符串中,支持file、ftp、gopher、hdl、http、https、imap、mailto、 mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、 sip、sips、snews、svn、svn+ssh、telnet和wais等协议
实现URL的识别和分段
urllib.parse.urlparse(urlstring, scheme=‘‘, allow_fragments=True)
一个标准的连接格式:scheme://netloc/path;parameters?query#fragment,返回结果是一个ParseResult类型的对象,一个6元组,它包含6部分,分别是scheme(协议)、netloc(域名及端口)、path(文件路径)、params(参数)、query(查询组建)和fragment(片段标识符)
将组建组合为一个url,接受的参数是一个长度为6可迭代对象,返回str类型url
和urlparse()方法非常相似,不单独解析params这一部分,只返回5个结果。params会合并到path中
与urlunparse()类似,长度必须为5
一个base_url(基础链接)作为第一个参数,将新的链接作为第二个参数,该方法会分析base_url的scheme、netloc和path这3个内容并对新链接缺失的部分进行补充,最后返回结果
将字典序列化为GET请求参数(key1=value1&key2=value2形式)
把一串GET请求参数,转回字典
把一串GET请求参数转化为元组组成的列表
将内容转化为URL编码的格式。URL中带有中文参数时,有时可能会导致乱码的问题,此时用这个方法可以将中文字符转化为URL编码
例如:
keyword = ‘壁纸‘
url = ‘https://www.baidu.com/s?wd=‘ + quote(keyword)
进行URL解码
名叫作网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取,通常是一个叫作robots.txt的文本文件,一般放在网站的根目录下
User-agent: * # User-agent描述了搜索爬虫的名称,设置为*则代表该协议对任何爬取爬虫有效
Disallow: / # Disallow指定了不允许抓取的目录,设置为/则代表不允许抓取所有页面
Allow: /public/ # Allow一般和Disallow一起使用,用来排除某些限制,这里表示所有页面不允许抓取,但可以抓取public目录
BaiduSpider:百度;Googlebot:谷歌;360Spider:360搜索;YodaoBot:有道;其它
rb = urllib.robotparser.RobotFileParser([robots.txt的url]) # 创键RobotFileParser对象
例子 :
from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.set_url(‘http://www.jianshu.com/robots.txt‘)
rp.read()
#或rp.parse(urlopen(‘http://www.jianshu.com/robots.txt‘).read().decode(‘utf-8‘).split(‘\n‘))
print(rp.can_fetch(‘*‘, ‘http://www.jianshu.com/p/b67554025d7d‘))
标签:读取 sch 中文参数 timeout 允许 otf cap col pre
原文地址:https://www.cnblogs.com/Wang-Y/p/9343364.html