Spider_req
requests模块
- 安装(用管理员身份去打开Anaconda Prompt)
conda install requestspython -m pip install requests# 以管理员身份去执行pip安装命令
- 常用方法
- get(url,headers=headers):发起请求,获取响应对象
- response属性
response.text:返回字符串类型response.content:返回bytes类型,应用场景:爬取非结构化数据response.encoding:一般返回 :ISO-8859-1response.encoding= "utf-8":制定编码格式response.status_code:返回服务器响应码response.url:返回数据的URL地址
- get()使用场景
- 没有查询参数:res = requests.get(url,headers=headers)
- 有查询参数:params={},注:params参数必须为字典,自动进行编码
- post() 参数名:data
- data = {}
import requests
url = "http://www.baidu.com/"
headers = {"Uesr-Agent":"Mozilla/5.0"}
# 发请求获相应
response = requests.get(url, headers=headers)
# 获取响应对象内容
# print(response.text)
# 获取编码类型
print(response.encoding)
# 更改编码
response.encoding = "utf-8"
print(response.text)
# 获取字节流
print(response.content)
# 获取响应码
print(response.status_code)
# 返回url
print(response.url)
# get参数
url = "http://www.baidu.com/s?"
key = input("请输入搜索的内容:")
params = {"wd": key}
res = requests.get(url, params=params, headers=headers)
# 指定utf-8
res.encoding = "utf-8"
print(res.text)
代理(参数名:proxies)
- 获取代理IP的网站
- 西刺代理网站
- 快代理
- 全网代理
- 查看自己的ip:
https://www.whatismyip.com/
- 普通代理
proxies = {"协议":"协议://IP地址:端口号"}- 183.129.207.82 11597
- 183.230.177.118 8060
- 私密代理
proxies = {"http":"http://309435365:szayclhp@123.206.119.108:21081"}
案例1: 安居客
import requests
import re
import csv
import time
import pymongo
# 读取文件尝试
# p = re.compile('<span class="comm-address" title="(.*?) (.*?)">.*?<span class="price-det"><strong>(.*?)</strong>.*?"unit-price">(.*?)</span>', re.S)
# with open('./html.txt') as f:
# txt = f.read()
# html = p.findall(txt)
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"}
url = "https://nb.anjuke.com/sale/gaoxinquz/"
def load_page(url):
# proxies = {"https":"https://110.178.48.14:56754"}
res = requests.get(url, headers=headers)
p = re.compile('<div class="details.*?<span>(.*?)</span><em class.*?<span>(.*?)m²</span>.*?<span class="comm-address" title="(.*?) (.*?)">.*?<span class="price-det"><strong>(.*?)</strong>.*?"unit-price">(.*?)元/m²</span>', re.S)
html = p.findall(res.text)
return html
def write_page(r_list):
for r_tuple in r_list:
with open("ajk.csv", "a", newline='') as f: # 开头不空行
# 创建写入对象
writer = csv.writer(f)
L = [i for i in r_tuple]
writer.writerow(L)
def write_mongo(html):
conn = pymongo.MongoClient("localhost", 27017)
db = conn.spiderdb
myset = db.anjuke
for r_tuple in html:
D = {"房型":r_tuple[0],
"大小":r_tuple[1],
"小区":r_tuple[2],
"位置":r_tuple[3],
"总价":r_tuple[4],
"单价":r_tuple[5]}
myset.insert(D)
for i in range(10):
url = url + "p" + str(i+1) + "/"
html = load_page(url)
write_mongo(html)
# write_page(html)
time.sleep(1)
Web客户端验证(参数名:auth)
auth=("用户名","密码")auth=("tarenacode","code_2013")
SSL证书认证(参数名:verify)
- verify = True : 默认,进行SSL证书认证
- verify = False: 不做认证
- 例如有些http没有认证,需要修改
import requests
url = "https://www.12306.cn/mormhweb/"
headers = {"User-Agent":"Mozilla/5.0"}
res = requests.get(url, headers=headers, verify=False) #
res.encoding = "utf-8"
print(res.text)
urllib.request中Handler处理器
- 定义
- 自定义的urlopen()方法,urlopen()方法是一个特殊的opener(模块已定义好),不支持代理等功能,通过Handler处理器对象来自定义opener对象
- 常用方法
- build_opener(Handler处理器对象) :创建opener对象
- opener.open(url,参数)
- 使用流程
- 创建相关的Handler处理器对象
- http_handler = urllib.request.HTTPHandler()
- 创建自定义opener对象
- opener = urllib.request.build_opener(http_handler)
- 利用opener对象打开url
- req = urllib.request.Request(url,headers=headers)
- res = opener.open(req)
- 创建相关的Handler处理器对象
- Handler处理器分类
- HTTPHandler():没有任何特殊功能
- ProxyHandler(普通代理)
- 代理: {"协议":"IP地址:端口号"}
- ProxyBasicAuthHandler(密码管理器对象):私密代理
- HTTPBasicAuthHandler(密码管理器对象):web客户端认证
- 密码管理器对象作用
- 私密代理
- Web客户端认证
- 程序实现流程
- 创建密码管理器对象
pwdmg = urllib.request.HTTPPasswordMgrWithDefaultRealm()
- 把认证信息添加到密码管理器对象
pwdmg.add_password(None,webserver,user,passwd)
- 创建Handler处理器对象
- 私密代理
proxy = urllib.request.ProxyAuthBasicHandler(pwdmg)
- Web客户端
webbasic = urllib.request.HTTPBasicAuthHandler(pwdmg)
- 私密代理
- 创建密码管理器对象
'''Handler处理器示例.py'''
import urllib.request
url = "http://www.baidu.com/"
# 创建Handler处理器对象
http_handler = urllib.request.HTTPHandler()
#proxy_handler = urllib.request.ProxyHandler()
# 创建自定义的opener对象
opener = urllib.request.build_opener(http_handler)
# 利用opener对象的open()方法发请求
req = urllib.request.Request(url)
res = opener.open(req)
print(res.read().decode("utf-8"))
'''12_ProxyHandler示例.py'''
import urllib.request
url = "http://www.baidu.com/"
proxy = {"http":"127.0.0.1:8888"}
# 创建Handler处理器对象
pro_hand = urllib.request.ProxyHandler(proxy)
# 创建自定义opener对象
opener = urllib.request.build_opener(pro_hand)
# opener对象open方法发请求
req = urllib.request.Request(url)
res = opener.open(req)
print(res.read().decode("utf-8"))
Spider_req的更多相关文章
随机推荐
- 并查集树数据结构hdu1325
我的解法就是去构造了一棵树 以数组的存储方式 数组的值存放节点的根. 排除空树 剩下的就是出现环和多根节点的情况 也就是排除森林和有一个节点多个入度的情况 排除森林就用到了并查集 也就是便利数组让其仅 ...
- nodeJs学习路线
转载自:http://blog.fens.me/nodejs-roadmap/ 前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个. 和全部人一样,我也从 ...
- Install the IIS 6.0 Management Compatibility Components in Windows 7 or in Windows Vista from Control Panel
https://technet.microsoft.com/en-us/library/bb397374(v=exchg.80).aspx Install the IIS 6.0 Management ...
- Python demo working
一.游戏1.2.3 print("-------------- Guess Number Game---------------------") num=input("G ...
- Fedora27 源配置
一.添加阿里源,阿里源我感觉是现在国内比较好用的源,支持的发行版比较全.配置方法1.备份系统自带的源mv /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/f ...
- BZOJ1194: [HNOI2006]潘多拉的盒子(tarjan)
Description 传说中,有个神奇的潘多拉宝盒.如果谁能打开,便可以拥有幸福.财富.爱情.可是直到真的打开,才发现与之 相随的还有灾难.不幸.其实,在潘多拉制造这个宝盒的时候,设置了一些咒语来封 ...
- 【2017 Multi-University Training Contest - Team 1 1001】Add More Zero
[Link]: [Description] 让你求最大的k; 使得 10^k<=2^m-1 [Solution] 求出2^m-1的位数就好; [lg(2^m-1)] = lg(2^m) = m* ...
- 加快编译的技巧 & mount及tmpfs
除了在头文件里面 #ifndef xxx 可以在实际 include这个头文件的前后,加上 #ifndef,这样就不会打开和扫描这个头文件了. 另外,下面这篇文章里面也总结了 http://www.c ...
- effective stl读书笔记 & stl里面提供的算法 & emplace & ostream_iterator
加锁和解锁,也可以在构造函数和析构函数里面,自动调用. 相等和等价的关系:等价是用在排序的时候,跟less函数有关. vector,deque,string 要用erase-remove组合:而关联容 ...
- mongodb适用和不适用的应用场景
近期考虑把订单历史数据从Oracle数据库迁移到Nosql数据库做历史数据查询和分析,一天千万级数据.打算使用mongodb数据库.使用nodejs做查询和统计API,对并发请求量要求低,不知道有没有 ...