1、fiddler的使用
(1)右上是HTTP请求信息,
右下是http响应信息,点击黄色条解码
(2)Raw请求详细信息,raw响应所有信息
(3)webForms请求所带参数
(4)json接口响应内容

2、urllib库:模拟浏览器发送请求的库,python自带
(1)urllib.request

属性 作用
encode 如果写,你就写gbk,如果小括号里不写参数,默认utf-8
decode 如果不写,默认utf-8,如果写,写gbk
read 读取相应内容,内容是字节类型
geturl 根据响应内容,获取请求的url
getheaders 获取头部信息,列表里都是元组
getcode 获取状态码
readlines 按行读取,返回列表,都是字节类型

(2)urllib.parse

属性 作用
quote() url编码函数
unquote 解码函数,将%xxx指定字符
unlencode 给一个字典,将字典拼接成query_string并且实现了编码的功能

3、反爬:构建请求头部信息
(1)伪装自己是UA,让服务器认为你是浏览器上网
(2)构建请求对象,urllib.request.Request
4、post表单数据处理

form_data=urllib.parse.urllencode(form_data).encode()
import urllib.request
import urllib.parse# 获取posturl的网址
post_url = "http://fanyi.baidu.com/sug"
word = input("请输入您想要查询的英文单词:")
# word = "baby"
# 构建post表单的数据
form_data = {"kw": word,
}
# 发送请求的过程
# headers = {#    "Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/63.0.3239.132 Safari/537.36",
# }
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64;x64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/63.0.3359.181 Safari/537.36",
}
# 构建请求对象
request = urllib.request.Request(url=post_url, headers=headers)
# 处理post表单数据
form_data = urllib.parse.urlencode(form_data).encode()
# 发送请求
response = urllib.request.urlopen(request, data=form_data)
print(response.read().decode)
import urllib.request
import urllib.parsepost_url = "http://fanyi.baidu.com/v2transapi"
form_data = {'from': 'en','to': 'zh','query': 'baby','transtype': 'translang','simple_means_flag': '3','sign': '814534.560887','token': 'bbcbfd9569acc55a96311f2c873f7e0b',
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','Host': 'fanyi.baidu.com','Connection': 'keep-alive',}
request = urllib.request.Request(url=post_url, headers=headers)
form_data = urllib.parse.urlencode(form_data).encode()
response = urllib.request.urlopen(request, form_data)
print(response.read().decode("gbk"))

5、(1)ajax-get

import urllib.request
import urllib.parseurl = "https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&"
page = int(input("请输入"))
number = 20
data = {"start": (page - 1) * number,"limit": number,}
# 将字典转化为query_string
query_string = urllib.parse.urlencode(data)# 修改url
url += query_string
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",}
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode())


(2)ajax-post

import urllib.request
import urllib.parsepost_url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
city = input("请输入要查询的城市:")
page = input("请输入第几页:")
size = input("请输入要多少个:")fromdata = {"cname": city,"pid": " ","pageIndex": page,"pageSize": size,
}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",}
request = urllib.request.Request(url=post_url, headers=headers)
fromdata = urllib.parse.urlencode(fromdata).encode()
response = urllib.request.urlopen(request, data=fromdata)
print(response.read().decode())


(3)复杂get
需求:
输入吧名,输入起始页码,输入结束页码,
然后在当前文件夹中创建一个以吧名为名字的文件夹,;里面是每一页的html内容
文件名是吧名_page.html

import urllib.request
import urllib.parse
import osurl = "http://tieba.baidu.com/f?ie=utf-8"
"""
1 pn==0
2 pn==50
3 pn==100
4 pn==150
5 pn==(n-1)*50
"""
baidu_name = input("请输入要爬取的吧名:")
start_page = int(input("请输入要爬取的起始页码:"))
end_page = int(input("请输入要爬取的结束页码:"))
if not os.path.exists(baidu_name):os.mkdir(baidu_name)# 依次爬取每一页
for page in range(start_page, end_page + 1):data = {"kw": baidu_name,"pn": (page - 1) * 50}data = urllib.parse.urlencode(data)url_t = url + dataheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",}request = urllib.request.Request(url=url_t, headers=headers)print("第%s页开始下载···" % page)response = urllib.request.urlopen(request)filename = baidu_name + "_" + str(page) + ".html"filepath = baidu_name + "/" + filenamewith open(filepath, "wb") as fb:fb.write(response.read())print("第%s页结束下载···" % page)



6、URLError
(1)没有网
(2)服务器连接失败
(3)找不到指定服务器
7、HTTPError:是URLError的子类,两个同时捕获,需要将HTTPError写到上面,把URLError写到上面
8、urlopen()给定一个url。发送请求,获取响应
Request()定制请求头,创建请求对象

python网络爬虫学习笔记2相关推荐

  1. python网络爬虫学习笔记(6)动态网页抓取(一)知识

    文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...

  2. python网络爬虫学习笔记(7)动态网页抓取(二)实践

    文章目录 1 资料 2 笔记 2-1 准备 2-1-1. 网址 2-2-2 文本位置 2-2 代码 2-2-1 原型 2-2-2 ver0.1 1 资料 <Python网络爬虫从入门到实践> ...

  3. python 网络爬虫学习笔记(一)

    为了方便,在Windows下我用了PyCharm,个人感觉这是一款优秀的python学习软件.爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去 ...

  4. Python网络爬虫学习笔记(二)基本库的使用

    基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...

  5. python网络爬虫学习笔记(二):爬虫基本概述

    1.爬虫的基本概述 (1) 获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码.源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了. python提 ...

  6. python网络爬虫学习笔记(三):urllib库的使用

    文章目录 使用urllib库 1.urllib.request.urlopen()函数 urlopen()函数API: 2.urllib.request函数 验证 Cookies 保存Cookies ...

  7. python网络爬虫学习笔记(一):网页基础

    1.URI和URL URI的全称为Uniform Resource Identifier,即统一资源标志符,URL的全称为Universal Resource Locator,即统一资源定位符. 2. ...

  8. python网络爬虫学习笔记(十一):Ajax数据爬取

    文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...

  9. python网络爬虫学习笔记(十):数据存储

    文章目录 1.文本存储 2.JSON文件存储 2.1 读取JOSN 2.2 输出JSON 3.CSV文件存储 3.1 写入 3.2 读取 1.文本存储 import requests from pyq ...

  10. python网络爬虫学习笔记(九):Beautiful Soup的使用

    文章目录 1.基本用法 2.节点选择器 2.1 获取属性和名称 2.2 获取内容 (1)子节点和子孙节点 (2)父节点和祖先节点 (3)兄弟节点 3.方法选择器 4.CSS选择器 Beautiful ...

最新文章

  1. 【Python】/ 和 // 的区别
  2. 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope
  3. Elasticsearch 操作命令
  4. OPPO公开柔性显示相关专利 提高对柔性显示屏支撑强度
  5. 零基础(转行,应届生、在校生)前端开发学习计划
  6. javascript 字符串与数组之间的相互转换(join、split)与splice介绍
  7. 清除电脑多余垃圾--清除垃圾.bat文件 附保姆级操作步骤
  8. 零基础如何入门数学建模?
  9. LeetCode刷题-四因数
  10. 解决手机应用安装失败却占内存
  11. bmp格式如何转换成jpg
  12. 微信公众平台开发-消息管理-发送模板消息
  13. 内网ssl证书颁发_使用SSL和开放源证书颁发机构消除垃圾邮件
  14. 凸包问题-Graham-Scan算法-python实现
  15. 腾讯地图中轻松定义多边形
  16. android 动态库获取路径问题,一种Android App在Native层动态加载so库的方案
  17. 配置Linux版本teamviewer
  18. 《Java黑皮书基础篇第10版》 第1章【笔记】
  19. 《打开量化投资的黑箱》 阅读笔记
  20. 【2021年1月新书推荐】TensorFlow 2.x in the Colaboratory Cloud

热门文章

  1. 平面设计和UI设计区别是什么?
  2. 【麦肯锡系列阅读笔记】麦肯锡解决方法与技巧
  3. B001-Atmega16-数码管
  4. 长江流域取水工程核查登记工作居然采用的是表格控件SpreadJS???
  5. 超异构融合:边缘计算腾飞的契机
  6. ROS2之OpenCV人脸识别foxy~galactic~humble
  7. MTK flashtool 在14.04上不能使用问题
  8. 利用R,G,B三通道对图像分别生成mask并叠加,最终得到背景和书两种区域
  9. 基于深度学习的目标检测研究综述
  10. java打印post响应报文_如何优雅的在 SpringBoot 中打印 RequestResponse 日志