python爬虫(一):urllib(不常用)

1. python连接互联网

使用urllib库或者requests库

urllib库是python自带的标准库

requests库是第三方库,友好度更高,需要安装(anaconda实测不用)

urllib.request.urlopen()

# 导包

import urllib.request

# 打开网站,保存内容,赋值到response

response = urllib.request.urlopen("http://www.fishc.com")

# 显示内容,转utf格式

html = response.read()

html = html.decode("utf-8")

print(html)

urlopen默认参数:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

2. 实战:

下载猫图片

存放猫图片的网站: placekitten.com

使用anaconda的jupyter

代码:

import urllib.request

# 打开url,在这个网站,/g/500/600表示一张黑白的500*600的图片

response = urllib.request.urlopen("http://placekitten.com/g/500/600")

# 读取网址,存放到cat_img,注意此时还是二进制

cat_img = response.read()

# 保存为图片文件cat_01.jpg

with open('cat_01.jpg','wb') as f:

f.write(cat_img)

对于打开的网站,除了read方法,还有geturl、info、getcode方法

geturl:获取网址

info:(服务器返回的HTTPmessage信息),使用print打印出来

getcode:网址状态,200正常、404找不到等等

3. 爬虫隐藏:

import urllib.request

# 查看ip的一个网站

# url = 'https://www.whatismyip.com/'

url = 'http://ip.webmasterhome.cn/'

# 创建代理(代理ip是百度的)

proxy_support = urllib.request.ProxyHandler({'http':'124.243.226.18:8888'})

# 创建一个opener

opener = urllib.request.build_opener(proxy_support)

# 修改headers

opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0')]

# 安装opener

urllib.request.install_opener(opener)

# 访问

response = urllib.request.urlopen(url)

html = response.read().decode('gb2312')

print(html)

因为代理ip是百度的,免费但不稳定,所以多添加一些ip,及时更换

方法:

# 创建代理

# proxy_support = urllib.request.ProxyHandler({'http':'124.243.226.18:8888'})

ip_list = [# 代理ip列表,及时更换

'124.243.226.18:8888',

'61.135.217.7:80',

'101.132.71.56:808',

'61.135.155.82:443',

'101.132.71.56:808',

'221.227.31.84:8123']

proxy_support = urllib.request.ProxyHandler({'http':'random.choice(ip_list)'})

最终代码在anaconda的jupyter中。

4. 正则表达式

Python3 正则表达式:https://www.runoob.com/python3/python3-reg-expressions.html

基础:

re : 正则表达式包

样式 : r'字符串','字符串'

. : 任意字符

\ : 消除特殊字符的特殊功能如\.,或者附加特殊功能,如\d代表任意数字

[] : 取值范围,如[0-9]、[aeiou]、[a-z]

{} : 重复次数,可以是一个范围,如{3-6}

() : 跟数学运算差不多,组合起来,如([0-9][a-z]){3-6}

特殊字符: 详见 https://www.runoob.com/python3/python3-reg-expressions.html

5. 异常处理

URLerror:url异常,如url错误【Error 11001】

HTTPerror:http异常

http状态码大全:http://www.cnblogs.com/Qi1007/p/10058986.html

遇到的问题:

1) HTTP Error 403: Forbidden

网页拒绝了爬虫的访问,可以尝试加headers,使用代理ip

2) ValueError: too many values to unpack (expected 2)

数据格式错了,这里是headers格式错了,修改后解决

3) urllib.error.URLError: <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>

访问网页不成功,说明代理ip不行,换一个后解决

猜你喜欢

转载自blog.csdn.net/weixin_42490528/article/details/84845069