python爬虫学习-day2

这里写图片描述
模式修改符:
I:忽略大小写
M:多行匹配
U:unicode编码
L:本地化匹配
S:点任意匹配模式,改变’.’的行为

利用正则表达式对豆瓣出版社信息的提取:

import re
import urllib.request
url='https://read.douban.com/provider/all'
data=urllib.request.urlopen(url).read().decode('utf-8',"ignore")
pat= '<div class="name">(.*?)</div>'
res=re.compile(pat).findall(data)
print(res)

存入文件

file=open('reout.txt','w',encoding='utf-8')
for i in range(0,len(data)):
    file.write(data[i]+"\n")
file.close()

模仿http的get请求

import urllib.request
keywd='啦啦'
keywd=urllib.request.quote(keywd)
url="http://www.baidu.com/s?wd="+keywd
req=urllib.request.Request(url)
data=urllib.request.urlopen(req).read()
fh=open("request2.html",'wb')
fh.write(data)
fh.close()

模仿post请求:

import urllib.request
import urllib.parse
url=“登录页面链接”
mydata=urllib.parse.urlencode({"name":"",password=""}).encode("utf-8")
req=urllib.request.Request(url,mydata)
data=urllib.request.urlopen((req).read())

异常处理

1.常见状态码:
这里写图片描述

两个异常处理类:HTTPError是URLError的子类,前者有状态码和异常原因。
URLError:连不到服务器、无网络、url不存在,触发了httperror子类

伪装成爬虫浏览器

如果试着爬去csdn博客,会返回403,因为对方服务器对爬虫进行了屏蔽。此时需要伪装成浏览器,添加header报头才能爬取
这里写图片描述

爬取csdn首页所有文章

url="http://blog.csdn.net/"
headers=("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
opener.addheaders=[headers]
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='<h3  class="tracking-ad" data-mod="popu_254"><a href="(.*?)"'
result=re.compile(pat).findall(data)
for i in range(0,len(result)):
    file="csdn/"+str(i)+".html"
    urllib.request.urlretrieve(result[i],filename=file)
    print("第"+str(i+1)+"次爬取成功")

使用代理服务器

import urllib.request
def use_proxy(url,proxy_addr):
    proxy=urllib.request.ProxyHandler({"http":proxy_addr})
    opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    urllib.request.install_opener(opener)
    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
    return data
proxy_addr="119.183.220.224:8888"
url="http://www.baidu.com"
data=use_proxy(url,proxy_addr)
print(len(data))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值