Python爬虫-04:贴吧爬虫以及GET和POST的区别
目录
- 1. URL的组成
- 2. 贴吧爬虫
- 2.1. 只爬贴吧第一页
- 2.2. 爬取所有贴吧的页面
- 3. GET和POST的区别
- 3.1. GET请求
- 3.2. POST请求
- 3.3. 有道翻译模拟发送POST请求
1. URL的组成
汉字通过URL encode(UTF-8)编码出来的编码,里面的字符全是打字节
如果你复制粘贴下来这个网址,出来的不是汉字,而是编码后的字节
https://www.baidu.com/s?wd=%E7%BC%96%E7%A8%8B%E5%90%A7
我们也可以在python中做转换-urllib.parse.urlencode
import urllib.parse.urlencode
url = "http://www.baidu.com/s?"
wd = {"wd": "编程吧"}
out = urllib.parse.urlencode(wd)
print(out)
结果是: wd=%E7%BC%96%E7%A8%8B%E5%90%A7
2. 贴吧爬虫
2.1. 只爬贴吧第一页
import urllib.parse
import urllib.requesturl = "http://www.baidu.com/s?"
keyword = input("Please input query: ")wd = {"wd": keyword}
wd = urllib.parse.urlencode(wd)fullurl = url + "?" + wd
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
request = urllib.request.Request(fullurl, headers = headers)
response = urllib.request.urlopen(request)
html = response.read()print(html)
2.2. 爬取所有贴吧的页面
对于一个贴吧(编程吧)爬虫,可以翻页,我们可以总结规律
page 1: http://tieba.baidu.com/f?kw=%E7%BC%96%E7%A8%8B&ie=utf-8&pn=0
page 2: http://tieba.baidu.com/f?kw=%E7%BC%96%E7%A8%8B&ie=utf-8&pn=50
page 3: http://tieba.baidu.com/f?kw=%E7%BC%96%E7%A8%8B&ie=utf-8&pn=100
import urllib.request
import urllib.parsedef loadPage(url,filename):"""作用: url发送请求url:地址filename: 处理的文件名"""print("正在下载", filename)headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}request = urllib.request.Request(url, headers=headers)response = urllib.request.urlopen(request)html = response.read()return htmldef writePage(html,filename):"""作用:将html内容写入到本地html:服务器响应文件内容"""print("正在保存",filename)with open(filename, "wb") as f:f.write(html)print("-"*30)def tiebaSpider(url, beginPage, endPage):"""作用:贴吧爬虫调度器,复制组合处理每个页面的url"""for page in range(beginPage, endPage + 1):pn = (page - 1) * 50filename = "第" + str(page) + "页.html"fullurl = url + "&pn=" + str(pn)html = loadPage(fullurl,filename)writePage(html,filename)if __name__ == "__main__":kw = input("Please input query: ")beginPage = int(input("Start page: "))endPage = int(input("End page: "))url = "http://tieba.baidu.com/f?"key = urllib.parse.urlencode({"kw":kw})fullurl = url + keytiebaSpider(fullurl, beginPage, endPage)
结果是:
Please input query: 编程吧
Start page: 1
End page: 5
正在下载 第1页.html
正在保存 第1页.html
------------------------------
正在下载 第2页.html
正在保存 第2页.html
------------------------------
正在下载 第3页.html
正在保存 第3页.html
------------------------------
正在下载 第4页.html
正在保存 第4页.html
------------------------------
正在下载 第5页.html
正在保存 第5页.html
------------------------------
3. GET和POST的区别
- GET: 请求的url会附带查询参数
- POST: 请求的url不会
3.1. GET请求
对于GET请求:查询参数在QueryString里保存
3.2. POST请求
对于POST请求: 茶韵参数在WebForm里面
3.3. 有道翻译模拟发送POST请求
- 首先我们用抓包工具获取请求信息
POST http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null HTTP/1.1
Host: fanyi.youdao.com
Connection: keep-alive
Content-Length: 254
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://fanyi.youdao.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://fanyi.youdao.com/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-CA;q=0.6
Cookie: OUTFOX_SEARCH_USER_ID=-1071824454@10.169.0.83; OUTFOX_SEARCH_USER_ID_NCOO=848207426.083082; JSESSIONID=aaaiYkBB5LZ2t6rO6rCGw; ___rl__test__cookies=1546662813170
x-hd-token: rent-your-own-vps
# 这一行是form表单数据,重要
i=love&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=15466628131726&sign=63253c84e50c70b0125b869fd5e2936d&ts=1546662813172&bv=363eb5a1de8cfbadd0cd78bd6bd43bee&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTIME&typoResult=false
- 提取关键的表单数据
i=love
doctype=json
version=2.1
keyfrom=fanyi.web
action=FY_BY_REALTIME
typoResult=false
- 有道翻译模拟
import urllib.request
import urllib.parse# 通过抓包方式获取,并不是浏览器上面的URL地址
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"# 完整的headers
headers = {"Accept" : "application/json, text/javascript, */*; q=0.01","X-Requested-With" : "XMLHttpRequest","User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8"
}# 输入用户接口
key = input("Please input english: ")# 模拟有道翻译传回的form数据
# 这是post发送到服务器的form数据,post是有数据提交到web服务器的,与服务器做一个交互,通过传的数据返回响应的文件,而get不会发数据
formdata = {"i":key,"doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_REALTIME","typoResult": "false"
}# 通过转码
data = urllib.parse.urlencode(formdata).encode("utf-8")
# 通过data和header数据,就可以构建post请求,data参数有值,就是POST,没有就是GET
request = urllib.request.Request(url, data=data, headers=headers)
response = urllib.request.urlopen(request)
html = response.read()print(html)
结果如下:
Please input english: hello
b' {"type":"EN2ZH_CN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"hello","tgt":"\xe4\xbd\xa0\xe5\xa5\xbd"}]]}\n'
转载于:https://www.cnblogs.com/haochen273/p/10220816.html
Python爬虫-04:贴吧爬虫以及GET和POST的区别相关推荐
- Python实训day04am【爬虫介绍、爬取网页测试、Python第三方库】
Python实训-15天-博客汇总表 目录 1.文本文件编程题 2.爬虫(Scrapy) 2.1.安装第三方库 2.2.爬取网页测试 2.2.1.样例1 2.2.2.样例2 3.PyCharm导入第三 ...
- python爬虫(廖雪峰商业爬虫)
文章目录 day01 http Request Headers Response Headers 其他 爬虫工作原理 demo day02 1.get传参 2.post请求 3.User-Agent: ...
- 一木.溪桥学爬虫-04:requests模块
一木.溪桥 在Logic Education跟Jerry学爬虫 07期:Python 爬虫 一木.溪桥学爬虫-04:requests模块.cookie.session 日期:2021年1月31日 学习 ...
- Python实现信息自动配对爬虫排版程序(附下载)
授权自AI科技大本营(ID:rgznai100) 本文约2800字,建议阅读7分钟. 本文为你介绍Python实现信息自动配对爬虫排版程序. 公众号(DatapiTHU)后台回复"20200 ...
- python爬虫图片-如何用Python来制作简单的爬虫,爬取到你想要的图片
原标题:如何用Python来制作简单的爬虫,爬取到你想要的图片 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我 ...
- Python 网络爬虫 001 (科普) 网络爬虫简介
Python 网络爬虫 001 (科普) 网络爬虫简介 1. 网络爬虫是干什么的 我举几个生活中的例子: 例子一: 我平时会将 学到的知识 和 积累的经验 写成博客发送到CSDN博客网站上,那么对于我 ...
- python爬虫开发环境_python爬虫开发教程下载|Python爬虫开发与项目实战(范传辉 著)pdf 完整版_ - 极光下载站...
Python爬虫开发与项目实战pdf扫描版下载.Python爬虫开发是一个Pthyon编程语言与HTML基础知识引领读者入门知识,重点讲述了云计算的相关内容及其在爬虫中的应用,进而介绍如何设计自己的爬 ...
- python爬虫基础(一)~爬虫概念和架构
目录 1. 爬虫 1.1 概念 1.2 分类 2. 爬虫架构 2.1 url管理器 2.2 网页(html)下载(download)器 2.2.1 urllib下载html源码 2.2.2 reque ...
- python爬虫自学路线_python 爬虫学习路线:从入门到进阶
大家好,我是凉拌 今天给大家详解一下我的爬虫学习路线. 对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.比如有的人则认为先要掌握网页的知识,遂开始 HTML\CSS,结果入了前端的坑,浪费了 ...
- python 爬虫框架_Python网络爬虫-scrapy框架的使用
1. Scrapy 1.1 Scrapy框架的安装 Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted .lxml和pyOpenSSL.在不同的平台环境下,它所依赖 ...
最新文章
- 深圳大学计算机软件学院明仲,附件一-深圳大学计算机与软件学院.doc
- 【转】子网划分实例与讲解
- 深入理解Java的equals和hashCode方法
- boost::mp11::mp_eval_or相关用法的测试程序
- 【Tools】MarkDown教程(二)-MarkDown基本语法
- [ios2]苹果iOS 5限制应用本地存储问题 【转】
- 凭什么老程序员被裁,应届生却能月薪 1.3 万?
- win7下的ipython没有的问题
- C/C++遍历Windows文件夹下的所有文件
- 6复数与复变函数(六)
- 一种用于亚洲大豆锈病黄化和坏死严重程度评估的自动植物病理测量系统
- 基于模糊PID控制的光伏系统最大功率点跟踪的研究
- python|爬虫东宫小说
- 漫谈测试成长之探索——测试用例评审
- CF 183(div2)
- 学习(Java Web)编程技术要点及方向; 完成项目的要决
- 人工智能的本质就是计算机科学,什么是人工智能,这篇文章讲得很透彻!
- c++语言小游戏源码,跪求小游戏c++代码
- 【dtoj#4219】地中海气候
- 撸码也要好心情-宝藏壁纸网站wallhaven分享