日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫-04:贴吧爬虫以及GET和POST的区别

發(fā)布時間:2025/7/14 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫-04:贴吧爬虫以及GET和POST的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 1. URL的組成
  • 2. 貼吧爬蟲
    • 2.1. 只爬貼吧第一頁
    • 2.2. 爬取所有貼吧的頁面
  • 3. GET和POST的區(qū)別
    • 3.1. GET請求
    • 3.2. POST請求
    • 3.3. 有道翻譯模擬發(fā)送POST請求

1. URL的組成


漢字通過URL encode(UTF-8)編碼出來的編碼,里面的字符全是打字節(jié)

如果你復制粘貼下來這個網(wǎng)址,出來的不是漢字,而是編碼后的字節(jié)
https://www.baidu.com/s?wd=%E7%BC%96%E7%A8%8B%E5%90%A7

我們也可以在python中做轉(zhuǎn)換-urllib.parse.urlencode

import urllib.parse.urlencode url = "http://www.baidu.com/s?" wd = {"wd": "編程吧"} out = urllib.parse.urlencode(wd) print(out)

結(jié)果是: 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. 爬取所有貼吧的頁面

對于一個貼吧(編程吧)爬蟲,可以翻頁,我們可以總結(jié)規(guī)律

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發(fā)送請求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內(nèi)容寫入到本地html:服務器響應文件內(nèi)容"""print("正在保存",filename)with open(filename, "wb") as f:f.write(html)print("-"*30)def tiebaSpider(url, beginPage, endPage):"""作用:貼吧爬蟲調(diào)度器,復制組合處理每個頁面的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)

結(jié)果是:

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的區(qū)別


  • GET: 請求的url會附帶查詢參數(shù)
  • POST: 請求的url不會

3.1. GET請求

對于GET請求:查詢參數(shù)在QueryString里保存

3.2. POST請求

對于POST請求: 茶韻參數(shù)在WebForm里面



3.3. 有道翻譯模擬發(fā)送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表單數(shù)據(jù),重要 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
  • 提取關(guān)鍵的表單數(shù)據(jù)
  • 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數(shù)據(jù) # 這是post發(fā)送到服務器的form數(shù)據(jù),post是有數(shù)據(jù)提交到web服務器的,與服務器做一個交互,通過傳的數(shù)據(jù)返回響應的文件,而get不會發(fā)數(shù)據(jù) formdata = {"i":key,"doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_REALTIME","typoResult": "false" }# 通過轉(zhuǎn)碼 data = urllib.parse.urlencode(formdata).encode("utf-8") # 通過data和header數(shù)據(jù),就可以構(gòu)建post請求,data參數(shù)有值,就是POST,沒有就是GET request = urllib.request.Request(url, data=data, headers=headers) response = urllib.request.urlopen(request) html = response.read()print(html)

    結(jié)果如下:

    Please input english: hello b' {"type":"EN2ZH_CN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"hello","tgt":"\xe4\xbd\xa0\xe5\xa5\xbd"}]]}\n'

    轉(zhuǎn)載于:https://www.cnblogs.com/haochen273/p/10220816.html

    總結(jié)

    以上是生活随笔為你收集整理的Python爬虫-04:贴吧爬虫以及GET和POST的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。