首页 > 其他 > 详细

爬虫一

时间:2019-10-21 21:03:02      阅读:135      评论:0      收藏:0      [点我收藏+]

1、爬虫前奏
①URL详解
scheme:代表是访问的协议,一般为http或者是https以及ftp等:
host:主机名
port:端口号
path:查找路径
query-string:查询字符串,
anchor:锚点,后台一般不管,前端用来做页面定位的。

②http协议
常用的方法有get请求与post请求。
get请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响。
post请求:向服务器发送数据,上传文件等,会对服务器产生影响

③请求头常见参数
User-Agent:浏览器名称。
Referer:表面当前这个请求是从哪个URL过来的。
Cookie:http协议是无状态的。

④常见响应状态码
200:请求正常,服务器正常返回数据
301:永久重定向。
302:临时重定向。
400:请求的URL在服务器上找不到。
403:服务器拒绝访问,权限不够。
500:服务器内部错误。可能服务器出现bug了。

2、网络请求
①urllib库
在Python3中,所有与网络请求相关的方法都被集成到了urllib.request模块下面了。

②urlopen函数:
from urllib import request
resp = request.urlopen(‘http://www.baidu.com‘)#用.urlopen函数访问网页
print(resp.read())#用.read(size)方法将网页的所有内容读取出来
url:请求的url
data:请求的data,如果设置了这个值,那么将变成post请求。
返回值:read(size)默认读取所有信息,readline()默认读取一行信息,readlines()读取多行信息,gercode()是获取当前网页的状态码

③urlretrieve函数:
这个函数可以将网页上的一个文件保存到本地。
from urllib import request
resp = request.urlretrieve(‘http://www.baidu,.com/‘,‘baidu.html‘)#urlretrieve(‘网站地址‘,‘保存的名字‘)可以非常方便的获取图片或网页页面。

④urlencode函数和parse_qs函数:
这两个模块实在urllib.parse模块下的。
#urlencode()用于将中文和特殊符号进行编码。
from urllib import parse
params = {‘name‘:‘小白‘,‘age‘:‘18‘,‘greet‘:‘hello‘}
result = parse.urlencode(params)
print(result)
结果:name=%E5%B0%8F%E7%99%BD&age=18&greet=hello

#parse_qs()用于将解码。
from urllib import parse
params = {‘name‘:‘小白‘,‘age‘:‘18‘,‘greet‘:‘hello‘}
qs = parse.urlencode(params)
result = parse.parse_qs(qs)
print(result)
结果:{‘name‘: [‘小白‘], ‘age‘: [‘18‘], ‘greet‘: [‘hello‘]}

⑤urlparse函数和urlsplit函数:
用于将解析网址的函数,也是在urllib.parse模块下的。
from urllib import parse
#urlparse函数和urlsplit函数
url =‘https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B&rsv_spt=1&rsv_iqid=0x8644922000021612&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=06074089_36_pg&rsv_enter=1&rsv_dl=ib&rsv_sug3=5&rsv_sug1=1&rsv_sug7=100‘
# result = parse.urlparse(url)
result = parse.urlsplit(url)#区别在于urlsplit函数没有params
print(result)
print(‘scheme:‘,result.scheme)
print(‘netloc:‘,result.netloc)
print(‘path:‘,result.path)
# print(‘params:‘,result.params)
print(‘query:‘,result.query)
print(‘fragment:‘,result.fragment)

⑥request.Request类
例如:
from urllib import request,parse

url = ‘https://www.cnblogs.com/wu-wu/category/1488072.html‘#网页地址

headers ={
‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36‘
}#网页的请求头

req = request.Request(url,headers = headers)#导入网页地址和请求头,以浏览器身份请求网页
resp = request.urlopen(req)#打开网页地址
print(resp.read().decode(‘utf-8‘))#将请求的内容解码回来并打印出来

⑦ProxyHandler处理器(代理设置)
from urllib import request

url = ‘http://httpbin.org/ip‘#查看自己IP的网站
handler = request.ProxyHandler({"https":"117.57.90.25:9999"})#设置代理网站
opener = request.build_opener(handler)#打开代理网站
# req = request.Request("http://httpbin.org/ip")
resq = opener.open(url)
print(resq.read())

⑧cookie原理及格式详情
cookie是可以用于存储登录信息,cookie能存储信息比较小。
#cookie的格式:Set-Cooker: NAME=VALUE: Expires/Max-age=DATH: Domain=DOMAIN_MAME:SECURE
#NAME:cookie的名字。
#VALUE:cookie的值。
#Expires:cookie的过期时间。
#Path:cookie作用的路径。
#Domain:cookie作用的域名。
#SECURE:是否只在https协议下起作用。

⑨cookie 模拟登录
from urllib import request

url = ‘https://www.cnblogs.com/‘

headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
"cookie":"_ga=GA1.2.1000081871.1564917076; __gads=ID=bb1d9716962a6860:T=1564975837:S=ALNI_MbVG3G2dcIKXSXxurKKe5iO6IWHWA; .Cnblogs.AspNetCore.Cookies=CfDJ8DeHXSeUWr9KtnvAGu7_dX-AytKAwHwN4y3UUIBU1EbRva5IDlRvpDrHugXNjaVki8tfaRWspxWeHF63Pt55AES0yBNEXKbmnXR8mY_FZO4MHTK5InVChdxgA2j7e4t-O7wfLoHpfTFuXhVSdh1ui2sNU_04KWrxA5bEqNM22AnBLf20ST9eTo4KRPLE7YwW8V2g1d_ATSJDNYmfjiIj943KAyYAOyfW-YGlkyI9TrXTk6WYrxB9HHVaBFD6tC3RTlhNP_tEZqtHiYOxcgO628qCG5gR7im15EpZy-TKP4EhgEqGQBjIiMqOV4KV6vATpUN7OvoOkl-SGTUiCMBBT3WyH4s6NBQN8q116QQ1IH0DMhMdl98G8UzcwLtGibtdhgmg8wvJ878yG2wfHORQAA58yajD8wA5NjjZBfwyyROnAJI5l4ep911YNyUW0MTYC615_5qKJ-ADq6510cfxTpo; .CNBlogsCookie=191DA8F2560020F7B2FFE700ADE7182A6C3FFFD67AD8271E0930A5EFBBEF16CE45618DF55908A3BC13106870EDC576487E8204716B56647199A2E5385246C81D3275319AB63957E5DF1FA243276F458BFE2E8ECB; _gid=GA1.2.1150744539.1571561207"
}#cookie模仿浏览器存储账号和密码的

req = request.Request(url=url,headers=headers)#传入网页地址和头文件内容
resp =request.urlopen(req)#用于打开网页
with open(‘bokeyuan.html‘,‘w‘,encoding=‘utf-8‘) as fp:#用文件存储的方式将获得的内容写入文件中
#write函数必须写入一个str的数据类型,但的到的网页一般是bytes(二进制)的数据类型,所以需要用decode解码
fp.write(resp.read().decode(‘utf-8‘))

⑩http.cookiejar模块
#Cookicjar:管理HTTP cookie的值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象
#FileCookiejar:从Cookicjar派生而来,用来创建FileCookiejar实例,检索cookie信息并将cookie存储到文件中
#MozillaCookiejar:创建Mozilla浏览器 cookie.txt兼容的FileCookiejar实例
#LWPCCookiejar:创建libwww.perl标准的Set-Cookie3文件的格式兼容的FileCookiejar
from urllib import request,parse
from http.cookiejar import CookieJar

headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
}
def get_opener():
cookiejar = CookieJar()#创建一个cookiejar对象
handler =request.HTTPCookieProcessor(cookiejar)#使用cookiejar创建一个HTTPCookieProcessor对象
opener = request.build_opener(handler)#使用上一步创建的hanler创建opener
return opener

def login_boke(opener):
data ={
"Loginname":"用户名",
"Password":"密码"
}
login_url ="https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F"
req = request.Request(login_url,data=parse.urlencode(data).encode(‘utf-8‘),headers=headers)
opener.open(req)#使用opener发送登录的请求(登录界面的登录账号和登录密码)

def visit_profile(opener):
zhu_url = "https://www.cnblogs.com/"#访问主页面
req =request.Request(zhu_url,headers=headers)
resp = opener.open(req)
with open(‘boke.html‘,‘w‘,encoding=‘utf-8‘) as fp:
fp.write(resp.read().decode(‘utf-8‘))

if __name__ ==‘__main__‘:
opener= get_opener()
login_boke(opener)
visit_profile(opener)

 

爬虫一

原文:https://www.cnblogs.com/dcpb/p/11715881.html

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