爬蟲day01 基本介紹,請求
目錄
1.網路爬蟲
1.定義:網路蜘蛛 網路機器人 ,抓取網路資料的程式 2.總結:用python程式去模仿人去訪問網站,模仿的越逼真越好 3.目的:通過有效的大量的資料分析市場走勢,公司的決策 2.企業獲取資料的方式 1.公司自有 2.第三方資料平臺購買 資料堂 貴陽大資料交易所 3.爬蟲爬取資料 市場上沒有或者價格太高,利用爬蟲程式去爬取 3.python做爬蟲的優勢 python:請求模組,解析模組豐富成熟 PHP:對多執行緒,非同步支援不夠好 JAVA: 程式碼笨重,程式碼量大 C/C++:雖然效率高,但是程式碼成型太慢 4.爬蟲的分類 1.通用的網路爬蟲(搜尋引擎引用,需要遵守robots協議) 1.搜尋引擎如何獲取一個新網站的url 1.網站主動向搜尋引擎提供(百度站長平臺) 2.和DNS服務商(萬網),快速收錄新網站 2.聚焦網路爬蟲 自己寫的爬蟲程式:面向主題爬蟲 面向需求爬蟲
爬蟲 反爬蟲 反反爬蟲 5.爬取資料步驟 1.確定需要爬取的url地址 2.通過HTTP/HTTPS協議來獲取響應的HTML頁面 3.提取HTML頁面裡有用的資料 1.所需資料,儲存 2.頁面中其他的URL,繼續 2 步
6.Chrome瀏覽器外掛
1.外掛安裝 1.右上角-更多工具-擴充套件程式 2.點開 開發者模式 3.把外掛退拽到瀏覽器介面 2.外掛介紹 1.Proxy SwitchOmega:代理切換外掛 2.XPath Helper:網頁資料解析外掛 3.JSON View:檢視json格式的資料(好看)
7.Filldler抓包工具
1.抓包設定 1.設定Filldler抓包工具 2.設定瀏覽器代理
8.Anaconda 和 spyder
1.anaconda:開源的python發行版本 2.Spyder:整合的開發環境 spyder常用快捷鍵 1.註釋/取消註釋:ctrl+1 2.儲存:ctrl+s 3.允許程式:F5
9.WEB
1.HTTP 和 HTTPS 1.HTTP:80 2.HTTPS:443 HTTP的升級版 2.GET 和 POST 1.GET:查詢引數會在URL上顯示出來 2.POST:查詢引數和提交資料在form表單裡,不會再URL地址上顯示 3.URL http:// item.jd.com :80 /26606127795.html #detail 協議 域名/IP地址 埠 要訪問的資源路徑 錨點 4.User-Agent 記錄使用者的瀏覽器,作業系統等,為了讓使用者獲取更好的HTML頁面效果
Mozilla : Firefox(Gecko核心) IE : Trident() Linux : KHTML(like Gecko) Apple : Webkit(like KHTML) google : Chrome(like webkit)
10.爬蟲請求模組
1. urllib.request 1.版本 1.python2中:urllib 和 urllib 2.python3中:把兩者合併,urllib.request 2.常用方法 1.urllib.request.urlopen("url") 作用:向網站發起請求並獲取響應
import urllib.request
url = "http://www.baidu.com/"
# 發起請求並獲取響應物件
response = urllib.request.urlopen(url)
# 響應物件的read()方法獲取響應內容
# read()得到的是 bytes 型別
# decode() bytes -> string
html = response.read().decode("utf-8")
print(html)
2、urllib.request.Request(url,headers={}) 1、重構User-Agent,爬蟲和反爬蟲鬥爭第一步 2、使用步驟 1、構建請求物件request :Request() 2、獲取響應物件response :urlopen(request) 3、利用響應物件response.read().decode("utf-8")
import urllib.request
url = "http://www.baidu.com/"
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
# 1.構建請求物件
request = urllib.request.Request(url,headers=headers)
# 2.獲取響應物件
response = urllib.request.urlopen(request)
# 3.獲取響應物件內容
html = response.read().decode("utf-8")
# 獲取響應碼
print(response.getcode())
# 獲取響應報頭資訊
print(response.info())
3. 請求物件request方法 1. add_header() 作用 : 新增/修改headers(User-Agent) 2. get_header("User-agent") : 只有U是大寫 作用 : 獲取已有的HTTP報頭的值
import urllib.request
url = "http://www.baidu.com/"
headers = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"
# 1.構建請求物件
request = urllib.request.Request(url)
# 請求物件方法 add_header()
request.add_header("User-Agent",headers)
# 獲取響應物件
response = urllib.request.urlopen(request)
# get_header()方法獲取 User-Agent
print(request.get_header("User-agent"))
4. 響應物件response方法 1. read() : 讀取伺服器響應的內容 2. getcode() 作用 : 返回HTTP的響應碼 200 : 成功 4XX : 伺服器頁面出錯 5XX : 伺服器出錯 3. info() 作用 : 返回伺服器響應的報頭資訊 2.urllib.parse 1.quote("中文") 見:04_quote編碼.py 2.urlencode(字典) url : wd="美女"
d = {"wd":"美女"} d = urllib.parse.urlencode(d) print(d) 結果 : wd=%E7%BE%8E%E5%A5%B3 3.unquote("編碼之後的字串")
import urllib.request
import urllib.parse
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
url = "http://www.baidu.com/s?wd="
key = input("請輸入要搜尋的內容:")
# 編碼,拼接URL
key = urllib.parse.quote(key)
fullurl = url + key
# 構建請求物件
request = urllib.request.Request(fullurl,headers=headers)
# 獲取響應物件
response = urllib.request.urlopen(request)
# read().decode()
html = response.read().decode("utf-8")
print(html)
import urllib.request
import urllib.parse
baseurl = "http://www.baidu.com/s?"
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
key = input("請輸入要搜尋的內容:")
# urlencode編碼,引數一定要是字典
d = {"wd":key}
d = urllib.parse.urlencode(d)
url = baseurl + d
# 構建請求物件
request = urllib.request.Request(url,headers=headers)
# 獲取響應物件
response = urllib.request.urlopen(request)
# 獲取內容
html = response.read().decode("utf-8")
print(html)
3.百度貼吧資料抓取 要求: 1.輸入貼吧的名稱 2.輸入抓取的起始頁和終止頁 3.把每一頁的內容儲存到本地:第1頁.html 第2頁.html 步驟: 1. 找URL規律(拼接URL) 第1頁 :http://tieba.baidu.com/f?kw=達內&pn=0 第2頁 :http://tieba.baidu.com/f?kw=達內&pn=50 第3頁 :http://tieba.baidu.com/f?kw=達內&pn=100 第n頁 :pn=(n-1)*50 2. 獲取響應內容
3. 儲存到本地/資料庫
# 資料抓取
import urllib.request
import urllib.parse
baseurl = "http://tieba.baidu.com/f?"
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
name = input("請輸入貼吧名:")
begin = int(input("請輸入起始頁:"))
end = int(input("請輸入終止頁:"))
# URL進行編碼
kw = {"kw":name}
kw = urllib.parse.urlencode(kw)
# 寫迴圈拼接URL,發請求獲響應,寫入本地檔案
for page in range(begin,end+1):
# 拼接URL
pn = (page-1)*50
url = baseurl + kw + "&pn=" + str(pn)
# 發請求,獲響應
req = urllib.request.Request(url,headers=headers)
res = urllib.request.urlopen(req)
html = res.read().decode("utf-8") # 字串
# 寫檔案/儲存到本地
filename = "第" + str(page) + "頁.html"
with open(filename,"w",encoding="utf-8") as f:
print("正在下載第%d頁" % page)
f.write(html)
print("第%d頁下載成功" % page)
print("*" * 30)
# 封裝成類後
import urllib.request
import urllib.parse
class BaiduSpider:
def __init__(self):
self.baseurl = "http://tieba.baidu.com/f?"
self.headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
# 請求並讀取頁面內容
def getPage(self,url):
req = urllib.request.Request(url,headers=self.headers)
res = urllib.request.urlopen(req)
html = res.read().decode("utf-8")
return html
# 儲存到本地檔案
def writePage(self,filename,html):
with open(filename,"a",encoding="utf-8") as f:
f.write(html)
# 主函式
def workOn(self):
name = input("請輸入貼吧名:")
begin = int(input("請輸入起始頁:"))
end = int(input("請輸入終止頁:"))
kw = {"kw":name}
kw = urllib.parse.urlencode(kw)
for page in range(begin,end+1):
pn = (page-1) * 50
url = self.baseurl + kw + "&pn=" + str(pn)
print("正在下載第%d頁" % page)
html = self.getPage(url)
filename = "第" + str(page) + "頁.html"
self.writePage(filename,html)
print("第%d頁下載成功" % page)
if __name__ == "__main__":
# 建立物件
spider = BaiduSpider()
# 物件呼叫類內方法
spider.workOn()
11.作業
1、爬取貓眼電影top100榜 1、程式執行,直接爬取第1頁 2、是否繼續爬取(y/n): y :爬取第2頁 n :爬取結束,謝謝使用 3、把每一頁的內容儲存到本地 第1頁.html ...
普通版 && 類
2、步驟 1、URL 2、獲取響應內容 3、寫入本地