requests模块

  1. 安装(用管理员身份去打开Anaconda Prompt)

    • conda install requests
    • python -m pip install requests # 以管理员身份去执行pip安装命令
  2. 常用方法
    1. get(url,headers=headers):发起请求,获取响应对象
    2. response属性
      • response.text:返回字符串类型
      • response.content:返回bytes类型,应用场景:爬取非结构化数据
      • response.encoding:一般返回 :ISO-8859-1
      • response.encoding = "utf-8":制定编码格式
      • response.status_code:返回服务器响应码
      • response.url:返回数据的URL地址
    3. get()使用场景
      • 没有查询参数:res = requests.get(url,headers=headers)
      • 有查询参数:params={},注:params参数必须为字典,自动进行编码
    4. 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)

  1. 获取代理IP的网站

    • 西刺代理网站
    • 快代理
    • 全网代理
    • 查看自己的ip:https://www.whatismyip.com/
  2. 普通代理
    • proxies = {"协议":"协议://IP地址:端口号"}

      • 183.129.207.82 11597
      • 183.230.177.118 8060
  3. 私密代理
    • 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="(.*?)&nbsp;&nbsp;(.*?)">.*?<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="(.*?)&nbsp;&nbsp;(.*?)">.*?<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处理器

  1. 定义

    • 自定义的urlopen()方法,urlopen()方法是一个特殊的opener(模块已定义好),不支持代理等功能,通过Handler处理器对象来自定义opener对象
  2. 常用方法
    • build_opener(Handler处理器对象) :创建opener对象
    • opener.open(url,参数)
  3. 使用流程
    1. 创建相关的Handler处理器对象

      • http_handler = urllib.request.HTTPHandler()
    2. 创建自定义opener对象
      • opener = urllib.request.build_opener(http_handler)
    3. 利用opener对象打开url
      • req = urllib.request.Request(url,headers=headers)
      • res = opener.open(req)
  4. Handler处理器分类
    • HTTPHandler():没有任何特殊功能
    • ProxyHandler(普通代理)
      • 代理: {"协议":"IP地址:端口号"}
    • ProxyBasicAuthHandler(密码管理器对象):私密代理
    • HTTPBasicAuthHandler(密码管理器对象):web客户端认证
    • 密码管理器对象作用
      • 私密代理
      • Web客户端认证
      • 程序实现流程
        1. 创建密码管理器对象

          • pwdmg = urllib.request.HTTPPasswordMgrWithDefaultRealm()
        2. 把认证信息添加到密码管理器对象
          • pwdmg.add_password(None,webserver,user,passwd)
        3. 创建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的更多相关文章

随机推荐

  1. Dojo入门篇

    Dojo是一个JavaScript实现的开源DHTML工具包,Dojo最初的目标是解决开发HTML应用程序中遇到的一些长期存在的问题.然而如今Dojo已经成为了开发RIA应用程序的利器. Dojo让W ...

  2. poj2002 哈希

    Squares Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 17666   Accepted: 6735 Descript ...

  3. 独立python环境之virtualenv和virtualenvwrapper

    介绍 如果有一台測试机,多个人使用,有多个项目,不同项目可能python版本号不一样.须要的库不一样. 我们须要一个独立干净的python环境,互相隔离,互不影响. virtualenv能够帮我们解决 ...

  4. leetcode第一刷_Text Justification

    这个题的接受率好低,搞得我一直不敢做.后来认真的看了一下题目,不是非常难嘛.字符串的题目ac率就是低,除了难,还由于它的測试用例太多. 思路不难,主要是由于特殊情况太多.纯模拟,我把全部的情况罗列一下 ...

  5. POJ 3276 枚举+差分?

    题意: 思路: 先枚举一下k 贪心:如果当前是B那么就翻 差分一下序列 mod2 就OK了 //By SiriusRen #include <cstdio> #include <cs ...

  6. SFDC 微服务实践之路 2016.12.10 杭州(整理)--转

    原文地址:http://mp.weixin.qq.com/s/8cC4Ewt6yPjnxdYxuNZlFQ 微服务是什么? 微服务是一种细粒度(Fine-Grain)的SOA 或许在座的高朋了解过其概 ...

  7. Gallery滑动一页(一个Item)效果

    本文主要介绍如何使用Gallery只滑动一页以及其实现原理. Demo APK 可以方便的查看效果,在各大应用商店搜索 trinea android 下载即可,如:Google Play. 可运行代码 ...

  8. AOP 动态添加函数

    Function.prototype.before = function(beforefn) { // 保存原函数的引用 var self = this; // 返回包含了原函数和新函数的代理函数 r ...

  9. codeforces1114D. Flood Fill(区间Dp)

    传送门: 解题思路: 区间Dp,发现某一个区间修改后区间颜色一定为左边或右边的颜色. 那么只需要设方程$f_(l,r,0/1)$表示区间$[l,r]$染成左/右颜色的最小代价 转移就是枚举左右颜色就好 ...

  10. Spring Cloud学习笔记【一】Eureka服务注册与发现

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...