python网络爬虫学习笔记2
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相关推荐
- python网络爬虫学习笔记(6)动态网页抓取(一)知识
文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...
- python网络爬虫学习笔记(7)动态网页抓取(二)实践
文章目录 1 资料 2 笔记 2-1 准备 2-1-1. 网址 2-2-2 文本位置 2-2 代码 2-2-1 原型 2-2-2 ver0.1 1 资料 <Python网络爬虫从入门到实践> ...
- python 网络爬虫学习笔记(一)
为了方便,在Windows下我用了PyCharm,个人感觉这是一款优秀的python学习软件.爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去 ...
- Python网络爬虫学习笔记(二)基本库的使用
基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...
- python网络爬虫学习笔记(二):爬虫基本概述
1.爬虫的基本概述 (1) 获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码.源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了. python提 ...
- python网络爬虫学习笔记(三):urllib库的使用
文章目录 使用urllib库 1.urllib.request.urlopen()函数 urlopen()函数API: 2.urllib.request函数 验证 Cookies 保存Cookies ...
- python网络爬虫学习笔记(一):网页基础
1.URI和URL URI的全称为Uniform Resource Identifier,即统一资源标志符,URL的全称为Universal Resource Locator,即统一资源定位符. 2. ...
- python网络爬虫学习笔记(十一):Ajax数据爬取
文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...
- python网络爬虫学习笔记(十):数据存储
文章目录 1.文本存储 2.JSON文件存储 2.1 读取JOSN 2.2 输出JSON 3.CSV文件存储 3.1 写入 3.2 读取 1.文本存储 import requests from pyq ...
- python网络爬虫学习笔记(九):Beautiful Soup的使用
文章目录 1.基本用法 2.节点选择器 2.1 获取属性和名称 2.2 获取内容 (1)子节点和子孙节点 (2)父节点和祖先节点 (3)兄弟节点 3.方法选择器 4.CSS选择器 Beautiful ...
最新文章
- 【Python】/ 和 // 的区别
- 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope
- Elasticsearch 操作命令
- OPPO公开柔性显示相关专利 提高对柔性显示屏支撑强度
- 零基础(转行,应届生、在校生)前端开发学习计划
- javascript 字符串与数组之间的相互转换(join、split)与splice介绍
- 清除电脑多余垃圾--清除垃圾.bat文件 附保姆级操作步骤
- 零基础如何入门数学建模?
- LeetCode刷题-四因数
- 解决手机应用安装失败却占内存
- bmp格式如何转换成jpg
- 微信公众平台开发-消息管理-发送模板消息
- 内网ssl证书颁发_使用SSL和开放源证书颁发机构消除垃圾邮件
- 凸包问题-Graham-Scan算法-python实现
- 腾讯地图中轻松定义多边形
- android 动态库获取路径问题,一种Android App在Native层动态加载so库的方案
- 配置Linux版本teamviewer
- 《Java黑皮书基础篇第10版》 第1章【笔记】
- 《打开量化投资的黑箱》 阅读笔记
- 【2021年1月新书推荐】TensorFlow 2.x in the Colaboratory Cloud