长期学习打卡之爬虫

初学爬虫,将一些基本的爬虫方法记录在这里供自己复习,日后会陆续更新。
一些基础知识:
状态码:例如200 400 403 404

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。 --百度百科

  1. urlib库里面的request
    a.获取网页的代码。 请求方式有GET和POST两种。urlopen方法可以获取网页的代码
from urllib import request
x1=request.urlopen('http://www.baidu.com',data=None)##获取百度首页代码,请求方式为GET
x1.read()##打印全部  read(size)
x1.readline()##读取1行
print(x1.readlines())##读取所有行并以列表形式存储

b.保存网页代码或文件至本地
urlretrieve()函数里第一个参数是url,第二个参数则是保存至本地的路径。

request.urlretrieve('http://www.baidu.com','baidu.html')##将网上文件保存至本地
  1. url库里面的parse
    a.在爬虫的过程种经常会遇到编码方面的问题,而parse里面提供了编码解码的功能。
from urllib import parse
data={'name':'张三','age':10,'st':'asdf'}
p1=parse.urlencode(data)##对data进行编码
p2=parse.parse_qs(p1)##解码
print(p1)
print(p2)

输出:

name=%E5%BC%A0%E4%B8%89&age=10&st=asdf
{'name': ['张三'], 'age': ['10'], 'st': ['asdf']}

b.
urlparse函数可以urlparse函数和urlsplit函数对获取的url进行分割。
两个函数用法十分相似。区别在于urlparse返回的数值中有"params"而urlsplit则不返回。


x=parse.urlparse('https://baike.baidu.com/item/Python/407313?fr=aladdin#2')##对Url各个组成成分的分割
x1=parse.urlsplit('https://baike.baidu.com/item/Python/407313?fr=aladdin#2')
print("scheme:",x.scheme)
print(x1)

输出:

scheme: https
SplitResult(scheme='https', netloc='baike.baidu.com', path='/item/Python/407313', query='fr=aladdin', fragment='2')
  1. request.Request类
    请求头可以帮助我们”伪装“得更像是正常的浏览器去访问,降低爬虫行为被发现的可能性。
    如果想要在请求的时候添加请求头,则必须使用request.Request类来实现。
    以百度为例:
    其中请求头headers1是在网页上获取的
    在这里插入图片描述
from urllib import request
headers1={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 Edg/81.0.416.64'
}
res=request.Request('https://www.baidu.com/',headers=headers1)
resp=request.urlopen(res)
print(resp.read())
  1. ProxyHandler 使用代理ip
    原理:先向代理ip服务器发送请求,代理ip再向url发送请求,成功后返回给代理ip然后再返回给本地。
    步骤:先传入一个代理,代理是字典的形式,key是http或https,value是ip:port。然后创建一个opener,这样之后就能使用open函数以代理的ip向url发送请求。
from urllib import request
url='https://httpbin.org/ip'##能返回访问ip的神奇网站
handler=request.ProxyHandler({'http':'60.216.101.46:32868'})##传入字典,Key为http或https,value格式:'代理ip:port端口'
opener=request.build_opener(handler)##创建opener
req=request.Request(url)
resp=opener.open(req)##用opener发送一个请求
print(resp.read())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值