爬虫精简

案例:爬虫>>非结构化数据>>2.6案例,黑马代码多线程:参考千峰代码盲区:1.在用fidder抓取会话时,怎么找对应页面的url,另外如果是post请求,data数据在哪里看,以及代码中要添加哪些数据?拓展了解:HTTPPasswordMgrWithDefaultRealm()ProxyBasicAuthHandler(代理授权验证)...
摘要由CSDN通过智能技术生成

案例:

爬虫>>非结构化数据>>2.6案例,黑马代码

多线程:参考千峰代码

 

盲区:

1.在用fidder抓取会话时,怎么找对应页面的url,另外如果是post请求,data数据在哪里看,以及代码中要添加哪些数据?

拓展了解:

HTTPPasswordMgrWithDefaultRealm()

ProxyBasicAuthHandler(代理授权验证)

2,爬取返回后对象的数据形式以及正则匹配后返回的数据类型

3,编码和字符集的关系,数据类型和对象类型间的关系,编码方式和数据类型间的关系

4,爬取第一层链接后,如何以及为什么要进入第二层链接。在scrapy框架中,spider文件下的多页url中的回调函数运用的逻辑原理

5,crapy框架中的request和response分别是在何时产生和应用的

主要是理解逻辑

1,工具(略)

2,原理:

请求得到

简单请求:

包urllib,

urllib.open(url) >>请求网站 >>返回类文件对象 >>read()读取下来,变成文件 (整个就是一个爬虫)

构造一个request对象目的添加HTTP报头(参数1:url,参数2:headers(伪造浏览器)) >>urllib.open(request) >>请求网站 >>返回类文件对象 >>读取下来,变成文件 (整个就是一个爬虫)

扩展(User-Agent可以随机,建个列表,然后random.choice随机从列表选一个)

 

get和post传参:

word = {"wd" : "传智播客"}
urllib.urlencode(word)
# 通过urllib.urlencode()方法,将字典键值对按URL编码转换,从而能被web服务器接受。
print urllib.unquote("wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2")
wd=传智播客
# 通过urllib.unquote()方法,把 URL编码字符串,转换回原先字符串。

 

有些网页内容使用AJAX加载,只要记得,AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了

在访问的时候则会报出SSLError

import ssl
context = ssl._create_unverified_context()
一般正常的网站都会主动出示自己的数字证书,来确保客户端和网站服务器之间的通信数据是加密安全的。

 

 

2,基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能

所以可以自定义opener

# 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
# http_handler = urllib2.HTTPSHandler()
opener = urllib2.build_opener(http_handler)
response = opener.open(request)

 

ProxyHandler处理器(*)

# 构建了两个代理Handler,一个有代理IP,一个没有代理IP
httpproxy_handler = urllib2.ProxyHandler({"http" : "124.88.67.81:80"})
nullproxy_handler = urllib2.ProxyHandler({})
opener = urllib2.build_opener(nullproxy_handler)

是先创建opener,里面可以加参数,然后用opener.open()函数(里面携带了一些参数)来打开request

代理IP,也可以用列表的形式创建,然后random.choice()来随机选择,并将其加入到opener中,先handler再build_opener(handler)

 

cookie登录(*)(多看视频,然后与黑马教程做对比)

1,直接登录,取到cookie(黑马说容易被封)

2,利用cookielib包,一次请求保存下来

 

 

URLError 产生的原因主要有:

  1. 没有网络连接

  2. 服务器连接失败

  3. 找不到指定的服务器

HTTP Error,错误代号是404,错误原因是Not Found,说明服务器无法找到被请求的页面。

通常产生这种错误的,要么url不对,要么ip被封。

根据返回的错误码对应的去百度(400-599)

 

包requests

对urllib进行了封装

response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
# 查看响应内容,response.text 返回的是Unicode格式的数据
print response.text
# 查看响应内容,response.content返回的字节流数据
​
# 查看响应内容,response.content返回的字节流数据
response = requests.post("http://www.baidu.com/", data = data)
params是get请求,data是post请求
代理参数proxies
response = requests.get("http://www.baidu.com", proxies = proxies)
私密代理
import requests

# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" }

response = requests.get("http://www.baidu.com", proxies = proxy)

print response.text
web客户端验证
如果是Web客户端验证,需要添加 auth = (账户名, 密码)

import requests

auth=('test', '123456')

response = requests.get('http:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值