一.获取登录后页面信息的两种方法

1.第一种方法:

人为把有效cookies加到请求头中,代码如下

import urllib.request

# 确定url
url = "https://weibo.com/u/5811151623/home" # 添加请求头
headers = {
"User-Agent": " Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Cookie": "SINAGLOBAL=1056235723769.1433.1526891663625; Ugrow-G0=1ac418838b431e81ff2d99457147068c; login_sid_t=92c3e5d6461a4a8852629513dba4eb99; cross_origin_proto=SSL; TC-V5-G0=8dc78264df14e433a87ecb460ff08bfe; wb_view_log=1536*8641.25; _s_tentry=passport.weibo.com; Apache=5865173766078.335.1563513209889; ULV=1563513209896:3:1:1:5865173766078.335.1563513209889:1538661475261; SCF=AtThUzjOQECs-GvkBXwLmxzpM3TCF5NC7qGqelck97jPb-KYiDq0-erPkD5uDCEcHbOaMMDc8-xeDffKoiS-W7g.; SUHB=0IIF8F3k8nZAPY; un=310955019@qq.com; TC-Page-G0=52dad2141fc02c292fc30606953e43ef|1563513247|1563513247; wb_view_log_5811151623=1536*8641.25; webim_unReadCount=%7B%22time%22%3A1563513248700%2C%22dm_pub_total%22%3A13%2C%22chat_group_client%22%3A0%2C%22allcountNum%22%3A19%2C%22msgbox%22%3A0%7D; SUBP=0033WrSXqPxfM72wWs9jqgMF55529P9D9W5i-1qlF8XW2aLLs530P9DB5JpV2hepeh.fSK5p1-WpMC4odcXt; SUB=_2AkMqbd6cdcPxrAZZmfkUyWrkbo5H-jyZuLdqAn7uJhMyAxh77g4KqSVutBF-XGCSCDwAF4qC498CuN9Q_vjFiwsA; UOR=www.hejizhan.com,vdisk.weibo.com,login.sina.com.cn"
}
# 创建请求对象
request = urllib.request.Request(url, headers=headers)
# 发送请求
response = urllib.request.urlopen(request)
# 读取数据并保存数据
data = response.read()
with open("01cookies.html", "wb") as f:
f.write(data)

2. 第二种方法

(1)代码登录(post请求),登录成功后得到有效cookie

(2)自动带着cookie去请求

注 cookiejar能自动保存这个cookie   若不用此包的话则每次获取cookie都需要登录,获取cookie(request.get_header('Cookie')),添加cookie("Cookie":相应的cookie),很繁琐。

代码如下

import urllib.request
from http import cookiejar
from urllib import parse # 登录之前的 登录页的网址https://www.yaozh.com/login/
# 找登录 参数 # 1. 代码登录
# 1.1 登录的网址
login_url = 'https://www.yaozh.com/login'
# 1.2 登录的参数
login_form_data = {
"username": "xiaomaoera12",
"pwd": "lina081012",
"formhash": "CE3ADF28C5",
"backurl": "https%3A%2F%2Fwww.yaozh.com%2F" }
# 1.3 发送登录请求POST
cook_jar = cookiejar.CookieJar()
# 定义有添加 cook 功能的 处理器
cook_hanlder = urllib.request.HTTPCookieProcessor(cook_jar)
# 根据处理器 生成 opener
opener = urllib.request.build_opener(cook_hanlder) # 带着参数 发送post请求
# 添加请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
}
# 1.参数转译(其是字典); 2. post请求的 data要求是bytes
login_str = parse.urlencode(login_form_data).encode('utf-8') login_request = urllib.request.Request(login_url, headers=headers, data=login_str)
# 如果登录成功, cookjar自动保存cookie
opener.open(login_request) # 2. 代码带着cooke去访问 个人中心
center_url = 'https://www.yaozh.com/member/'
center_request = urllib.request.Request(center_url, headers=headers)
response = opener.open(center_url)
# bytes -->str
data = response.read().decode() with open('02cook.html', 'w') as f:
f.write(data)

  

二. 异常

HTTPError与URLError

HTTPError继承自URLError

捕获异常代码

try:
response = urllib.request.urlopen(url)
except urllib.request.HTTPError as e:
print(e.code)

三.requests包

安装方法pip install requests

1. get

(1)具体用法如下代码

import requests

url = "http://www.baidu.com/"
response = requests.get(url)
data = response.content
print(type(data)) # 得到<class 'bytes'> data = response.text
print(type(data)) # 得到<class 'str'>

content得到的数据类型是字节,而text一般会猜一个编码类型(可以直接去看content,text的源码),有可能会错,所以优先使用content

(2)获取一些具体信息

a. 获取请求头

request_headers = response.request.headers

b. 获取响应头

response_headers = self.response.headers

c. 获取响应状态码

code = response.status_code

d. 请求的cookie以及响应的cookie

request_cookie = response.request._cookies  # 请求的cookie
response_cookie = response.cookies # 响应的cookie

(3)使用requests包时,不需要对包含中文的url转译(requests自动帮我们转了),使用python自带的urllib时需要自己转译,如下

new_url = urllib.parse.quote(url, safe=string.printable)

相应的请求代码

# url = 'https://www.baidu.com/s?wd=美女'
url = 'https://www.baidu.com/s' params = {
'wd':"美女"
}
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
}
response = requests.get(url,headers=headers, params=params)
data = response.content
with open('baidu.html', 'wb') as f:
f.write(data)

(4) jason

当网站返回的不是html而是标准的jason时,想获取里面信息时,转化成jason时,获取数据更方便import requests

import requests
import json url = 'https://api.github.com/user'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
}
# 这个 网址 返回的内容不是html 而是标准的json
response = requests.get(url, headers=headers) # str
data = response.content.decode()
print(type(data)) # 得到数据类型为字符串(jason字符串)
print(data) 下面是返回的内容
'''
{
"message": "Requires authentication",
"documentation_url": "https://developer.github.com/v3/users/#get-the-authenticated-user"
}
'''
# str-- dict 
data_dict = json.loads(data)
# json() 自动将json字符串 转换成Python dict list
data = response.json()
print(data['message'])

  

商业爬虫学习笔记day4的更多相关文章

  1. 商业爬虫学习笔记day1

    day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...

  2. 商业爬虫学习笔记day2

    1. get传参 (1)url中包含中文报错解决方法 urllib.request.quote("包含中文的url", safe = "string.printtable ...

  3. 商业爬虫学习笔记day3

    一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...

  4. 商业爬虫学习笔记day8-------json的使用

    一. 简介 JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式.它基于 ECMAScri ...

  5. 商业爬虫学习笔记day7-------解析方法之bs4

    一.Beautiful Soup 1.简介 Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据.其特点如下(这三个特点正是bs强大的原因,来自官方手册) a. Beau ...

  6. 商业爬虫学习笔记day6

    一. 正则解析数据 解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正 ...

  7. 商业爬虫学习笔记day5

    一. 发送post请求 import requests url = "" # 发送post请求 data = { } response = requests.post(url, d ...

  8. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  9. OpenCV图像处理学习笔记-Day4(完结)

    OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...

随机推荐

  1. C++常见STL介绍

    栈 :FILO 栈(stack)又名堆栈,它是一种线性表,是一个后进先出的数据结构. 使用时须加上头文件:#include<stack> 允许进行插入和删除操作的一端称为栈顶(top),另 ...

  2. 使用NLog把日志写入数据库并按天自动分表

    前言 最近用Asp.net Core开发程序的时候 因为时间的关系,就没有过多的去关注日志方面的功能 都是直接用系统的ILogger先记录着,然后看日志的时候就先在命令行看日志 在开发阶段没有什么问题 ...

  3. CTF-Tools 一款CTF古典密码加解密工具

    CTF-Tools 一款CTF古典密码加解密工具 工具截图 工具简介 一款CTF编码.解码.加密.解密工具. 支持的编码解码: URL-UTF-8 URL-GB2312 Unicode Escape( ...

  4. 攻防世界 WEB 高手进阶区 HCTF 2018 warmup Writeup

    攻防世界 WEB 高手进阶区 HCTF 2018 warmup Writeup 题目介绍 题目考点 PHP代码审计 Writeup 打开 http://220.249.52.134:37877 常规操 ...

  5. MYSQL5.7下载安装图文教程

    MYSQL5.7下载安装图文教程 一. MYSQL两种安装包格式 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.zip格式相当于绿色版,不需要安装,只需解压缩之后就可以使用了,但 ...

  6. idea中的maven模块变成灰色

    问题 在使用idea的过程中,遇到其中一个maven模块变成灰色,如下所示: 解决方法 方法一 造成这个的原因可能是忽略了maven模块,可以尝试如下解决方法:在idea中maven中找到ignore ...

  7. Go defer 原理和源码剖析

    Go 语言中有一个非常有用的保留字 defer,它可以调用一个函数,该函数的执行被推迟到包裹它的函数返回时执行. defer 语句调用的函数,要么是因为包裹它的函数执行了 return 语句,到达了函 ...

  8. dotnet templating 定制自己的项目模板

    由于工作需要,研究了一下VS 项目模板生成的相关内容,本文做一下记录借助.NET Core Template Engine创建一个加单的项目模板. 创建项目代码和配置文件 首先创建一个Minimal ...

  9. 钓鱼小技巧-XLM

    前言 XLM钓鱼不是一项新的技术,自从公开以后,网上有很多对其的分析文章,这里仅仅做一个分享和摸索记录.文章中有问题的地方还请指出. 一个简单的例子 新建一个excel表格,右键选择表,选择插入 插入 ...

  10. 全面了解一致性哈希算法及PHP代码实现

    在设计一个分布式系统的架构时,为了提高系统的负载能力,需要把不同的数据分发到不同的服务节点上.因此这里就需要一种分发的机制,其实就是一种算法,来实现这种功能.这里我们就用到了Consistent Ha ...