python学习(三)--跟着例子写的贴吧网页爬取
生活随笔
收集整理的這篇文章主要介紹了
python学习(三)--跟着例子写的贴吧网页爬取
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
from urllib import request
import urllib
#爬貼吧網頁文件到本地。首先在本地打開百度貼吧 搜索 java吧
#第一頁的內容是:http://tieba.baidu.com/f?ie=utf-8&kw=java&fr=search&red_tag=f0746297280
#第二頁 http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=50
#第三頁 http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=100
#第四頁 http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=150
#看規律 只有第一頁比較特殊 把第一頁換成:http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=0 也是可以的
#也就是地址欄實際上是 http://tieba.baidu.com/f?kw=java(如果是中文需要轉碼)&ie=utf-8&pn=0(格式為:(頁數-1)*50)
def load_file(url, fname):
print("正在下載:"+fname)
# 水果手機的safari
header = {"user-agent":
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"}
req = request.Request(url, headers=header) #這里是read方法 就讀取到了原始網頁 開始加了decode方法,結果報類型錯誤。decode方法把內容解析成了一個字符串
data = request.urlopen(req).read() return data
def spider(url, begin, end, fileName):
#rang函數 理解的類似于java的字符串切割的包左不包右原則,所以需要+1
for page in range(begin, end+1):
url = url +str((page-1)*50)
fname = fileName +str(page) +"頁.html"
html = load_file(url, fname)
writePage(html, fname)
def writePage(html, fname):
print("正在保存:"+fname)
#存放位置
targetLoaction = "D:\瀏覽器下載目錄\images" + "\\"+fname
print("保存文件為:"+targetLoaction)
with open(targetLoaction, "wb") as f:
f.write(html)
print(fname+"爬取成功")
if __name__ == "__main__":
name = input("請輸入要爬取的貼吧名:")
begin = int(input("請輸入起始頁:"))
end = int(input("請輸入尾頁:"))
if int(begin) > int(end) :
print("起始頁不可大于尾頁")
quit()
#組裝url
kw = urllib.parse.urlencode({"kw":name})
url = "http://tieba.baidu.com/f?kw="+kw+"&ie=utf-8&pn="
fileName = "爬取"+name+"吧第"
spider(url, begin, end, fileName);
import urllib
#爬貼吧網頁文件到本地。首先在本地打開百度貼吧 搜索 java吧
#第一頁的內容是:http://tieba.baidu.com/f?ie=utf-8&kw=java&fr=search&red_tag=f0746297280
#第二頁 http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=50
#第三頁 http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=100
#第四頁 http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=150
#看規律 只有第一頁比較特殊 把第一頁換成:http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=0 也是可以的
#也就是地址欄實際上是 http://tieba.baidu.com/f?kw=java(如果是中文需要轉碼)&ie=utf-8&pn=0(格式為:(頁數-1)*50)
def load_file(url, fname):
print("正在下載:"+fname)
# 水果手機的safari
header = {"user-agent":
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"}
req = request.Request(url, headers=header) #這里是read方法 就讀取到了原始網頁 開始加了decode方法,結果報類型錯誤。decode方法把內容解析成了一個字符串
data = request.urlopen(req).read() return data
def spider(url, begin, end, fileName):
#rang函數 理解的類似于java的字符串切割的包左不包右原則,所以需要+1
for page in range(begin, end+1):
url = url +str((page-1)*50)
fname = fileName +str(page) +"頁.html"
html = load_file(url, fname)
writePage(html, fname)
def writePage(html, fname):
print("正在保存:"+fname)
#存放位置
targetLoaction = "D:\瀏覽器下載目錄\images" + "\\"+fname
print("保存文件為:"+targetLoaction)
with open(targetLoaction, "wb") as f:
f.write(html)
print(fname+"爬取成功")
if __name__ == "__main__":
name = input("請輸入要爬取的貼吧名:")
begin = int(input("請輸入起始頁:"))
end = int(input("請輸入尾頁:"))
if int(begin) > int(end) :
print("起始頁不可大于尾頁")
quit()
#組裝url
kw = urllib.parse.urlencode({"kw":name})
url = "http://tieba.baidu.com/f?kw="+kw+"&ie=utf-8&pn="
fileName = "爬取"+name+"吧第"
spider(url, begin, end, fileName);
轉載于:https://www.cnblogs.com/fuguang/p/10607126.html
總結
以上是生活随笔為你收集整理的python学习(三)--跟着例子写的贴吧网页爬取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [MySQL光速入门]012 作业解答
- 下一篇: git仓库