Spider爬蟲-get、post請求

1:概念:php

   爬蟲就是經過編寫程序,模擬瀏覽器上網,而後讓其去互聯網上抓取數據的過程。html

2:python爬蟲與其餘語言的比較:java

  (1)php爬蟲弊端:多進程多線程支持的很差
  (2)java:代碼臃腫,重構成本較大
  (3)C/c++:不明智的選擇,C語言純面向過程
  (4)Python:學習成本低,較多模塊,具備框架的支持,Scripypython

3:分類(使用場景)c++

  (1)通用爬蟲:是搜素引擎中’抓取系統‘的重要組成部分(爬取的是整張頁面)。將互聯網上頁面內容進行抓取下載到服務器本地
    擴展:搜素引擎如何抓取互聯網的網頁
    1.門戶主動將本身的url提交給搜素引擎公司
    2.搜索引擎公司會和DNS服務商進行合做
    3.掛靠知名網站的友情連接ajax

  (2)聚焦爬蟲:根據指定的需求去網上爬去指定的內容瀏覽器

4.robots.txt協議:指定的是門戶中哪些數據能夠供爬蟲程序進行爬取和非爬取。(協議是防君子不防小人)服務器

查看網站後臺的robots協議:多線程

 5.反爬蟲:python爬蟲

  門戶網站經過相應的策略和技術手段,防止爬蟲程序進行網站數據的爬取。

6.反反爬蟲:

  爬蟲程序經過相應的策略和技術手段,破解門戶網站的反爬蟲手段,從而爬取到相應的數據。

 

get請求,爬取數據實例:

(1):簡單的get請求:模擬瀏覽器發送get請求,在百度上爬取搜索明星名字頁面

import requests
#get請求:爬取百度搜素
get_url='http://www.baidu.com/s'
wd=input('輸入你要搜素的明星名字:')

param={
    'ie':'utf-8',
    'wd':wd,

}
response=requests.get(url=get_url,params=param)
# print(response.text)
data=response.text

filename=wd+'.html'
with open(filename,'wt',encoding='utf-8') as f:
    f.write(data)

 實現的效果以下:

 

結合fiddler抓包工具圖解分析以下:

 

 (2):基於ajax的get請求:獲取豆瓣網上的電影排行榜信息

import requests
#指定開始位置和結束位置:start開始的視頻  limit:即每頁顯示的視頻數量(默認每頁是20個能夠本身設定每頁顯示的數值)
get_url='https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20'

param={

    'type':'13',
    'interval_id':'100:90',
    'action':'',
    'start':'0',  #指定開始爬取的開始位置
    'limit':'20', #默認每頁的顯示的視頻個數

}

response=requests.get(url=get_url,params=param)
print(response.text)

要獲取的頁面信息以下:

結合抓包工具,分析以下:

 結果以下,就能實現獲取指定頁數指定數量的電影信息:

 

 

 

post請求,爬取數據實例:

 (1):普通post請求,爬取百度翻譯信息

import requests
#百度翻譯:爬取post請求翻譯結果

#以下兩行代碼表示的是忽略證書(SSLError)
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

url='https://fanyi.baidu.com/sug'

header={

    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36',

}
data={
   'kw':'hi'

}

response=requests.post(url,data=data,headers=header )
print(response.text)

 

(2):基於ajax的post請求,搜素肯德基的門店信息

網址:http://www.kfc.com.cn/kfccda/storelist/index.aspx

import requests

#KFC門店查詢
get_url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'

header={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36',
}

address=input('輸入你要查詢的城市>>>:')
start_page=int(input('輸入開始頁>>>:'))
end_page=int(input('輸入結束頁>>>:'))

#for循環拿到每一頁的頁碼數(for..range取值,因此頁碼數必須爲int類型)
for page in range(start_page,end_page+1):

    data={
        'cname':'',
        'pid':'',
        'keyword':address,
        'pageIndex':str(page),
        'pageSize':'10',        #每頁顯示10條信息

    }
    #顯示每一頁的10條門店信息
    response=requests.post(url=get_url,data=data,headers=header)
    print(response.text)

 

相關文章
相關標籤/搜索