python accept解析_Python爬取某站上海租房圖片
技術標籤:python accept解析
點選上方“Python技術之巔”,馬上關注
真愛,請置頂或星標
前言
對於一個net開發這爬蟲真真的以前沒有寫過。這段時間開始學習python爬蟲,今天週末無聊寫了一段程式碼爬取上海租房圖片,其實很簡短就是利用爬蟲的第三方庫Requests與BeautifulSoup。python 版本:python3.6 ,IDE :pycharm。
第三方庫
首先安裝
我是用的pycharm所以另為的指令碼安裝我這就不介紹了。
如上圖開啟預設設定選擇Project Interprecter,雙擊pip或者點選加號,搜尋要安裝的第三方庫。其中如果建立的專案多記得Project Interprecter要選擇正確的安裝位置不然無法匯入。
Requests庫
requests庫的官方定義:Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。其實他就是請求網路獲取網頁資料的。
importrequests
header={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/537.36'}
res=requests.get('http://sh.58.com/zufang/',headers=header)try:
print(res.text);exceptConnectionError:
結果如下:
其中Request Headers的引數如下:
headers的一些屬性:
Accept:指定客戶端能夠接收的內容型別,內容型別的先後次序表示客戶都接收的先後次序
Accept-Lanuage:指定HTTP客戶端瀏覽器用來展示返回資訊優先選擇的語言
Accept-Encoding指定客戶端瀏覽器可以支援的web伺服器返回內容壓縮編碼型別。表示允許伺服器在將輸出內容傳送到客戶端以前進行壓縮,以節約頻寬。而這裡設定的就是客戶端瀏覽器所能夠支援的返回壓縮格式。
Accept-Charset:HTTP客戶端瀏覽器可以接受的字元編碼集
User-Agent : 有些伺服器或 Proxy 會通過該值來判斷是否是瀏覽器發出的請求
Content-Type : 在使用 REST 介面時,伺服器會檢查該值,用來確定 HTTP Body 中的內容該怎樣解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 呼叫時使用
application/json : 在 JSON RPC 呼叫時使用
application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用
在使用伺服器提供的 RESTful 或 SOAP 服務時, Content-Type 設定錯誤會導致伺服器拒絕服務
BeautifulSoup庫
BeautifulSoup可以輕鬆的解析Requests庫請求的頁面,並把頁面原始碼解析為Soup文件,一邊過濾提取資料。這是bs4.2的文件。
Beautiful Soup支援Python標準庫中的HTML解析器,還支援一些第三方的解析器,如果我們不安裝它,則 Python 會使用 Python預設的解析器,其中lxml 據說是相對而言比較強大的我下面的暗示是python 標準庫的。
選擇器select
選擇所有div標籤
soup.select("div")
選擇所有p標籤中的第三個標籤
soup.select("p:nth-of-type(3)")
相當於soup.select(p)[2]
選擇div標籤下的所有img標籤
soup.select("div img")
選擇div標籤下的直接a子標籤
soup.select("div
>a")
選擇id=link1後的所有兄弟節點標籤
soup.select("#link1 ~ .mybro")
選擇id=link1後的下一個兄弟節點標籤
soup.select("#link1 + .mybro")
選擇a標籤,其類屬性為className的標籤
soup.select("a .className")
選擇a標籤,其id屬性為idName的標籤
soup.select("a
#idName")
選擇a標籤,其屬性中存在attrName的所有標籤
soup.select("a[attrName]")
選擇a標籤,其屬性href=http://wangyanling.com的所有標籤
soup.select("a[href='http://wangyanling.com']")
選擇a標籤,其href屬性以http開頭
soup.select('a[href^="http"]')
選擇a標籤,其href屬性以lacie結尾
soup.select('a[href$="lacie"]')
選擇a標籤,其href屬性包含.com
soup.select('a[href*=".com"]')
從html中排除某標籤,此時soup中不再有script標籤
[s.extract() for s in soup('script')]
如果想排除多個呢
[s.extract() for s in soup(['script','fram']
BeautifulSoup庫需要學習的知識點,請參考bs4.2的文件。在這不再過多敘述。
importrequestsfrombs4importBeautifulSoup
header={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/537.36'}
res=requests.get('http://cd.58.com/zufang/',headers=header)
soup=BeautifulSoup(res.text,'html.parser')print(soup.prettify())
案例:爬取上海租房圖片
importrequestsimporturllib.requestimportosimporttimefrombs4importBeautifulSoup
header={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/62.0.3202.62Safari/537.36'}
url=['http://sh.58.com/zufang/pn{}/?ClickID=2'.format(number)fornumberinrange(6,51)]#分頁抓取
adminCout=6forarurlinurl:
adminCout=adminCout+1
res=requests.get(arurl,headers=header)
soup=BeautifulSoup(res.text,'html.parser')
arryImg=soup.select('.img_listimg')
print(arryImg)
count=0;forimginarryImg:
print(img['lazy_src'])
_url=img['lazy_src']
pathName="E:\\2333\\"+str(adminCout)+"_"+str(count)+".jpg"#設定路徑和檔名
result=urllib.request.urlopen(_url)#開啟連結,和python2.x不同請注意了
data=result.read()#否則開始下載到本地withopen(pathName,"wb")ascode:
code.write(data)
code.close()
count=count+1#計數+1
print("正在下載第:",count)
time.sleep(30)
只是實現功能,至於程式碼結果如下:
結語
對於python並非為了從net跳出來,學習python只是感興趣,但是通過這段時間的學習確實有些思想從net的思路中跳了出來,接下來一年的業餘時間應該都會花在學習python上,還希望自己能堅持下去。
本文作者:王延領,原文連結:https://www.cnblogs.com/kmonkeywyl/p/8409715.html