python爬url
⑴ 如何用python爬取網站數據
這里簡單介紹一下吧,以抓取網站靜態、動態2種數據為慧返拍例,實驗環境win10+python3.6+pycharm5.0,主要內容如下:
抓取網站靜態數據(數據在網頁源碼中):以糗事網路網站數據為例
1.這里假設我們抓取的數據如下,主要包括用戶昵稱、內容、好笑數和評論數這4個欄位,如下:
對應的網頁源碼如下,包含我們所需要的數據:
2.對應網頁結構,主要代碼如下,很簡單,主要用到requests+BeautifulSoup,其中requests用於請求頁面,BeautifulSoup用於解析頁面:
程序運行截圖如下,已經成功爬取到數據:
抓取網站動態數據(數據不在網頁源碼中,json等文件中):以人人貸網站數據為例
1.這里假設我們爬取的是債券數據,主要包括年利率世型、借款標題、期限、金額和進度這5個欄位信息,截圖如下:
打開網頁源碼中,可以發現數據不在網頁源碼中,按F12抓包分析時,才發現在一個json文件中,如下:
2.獲取到json文件的url後,我們就可以爬取對應數據了,這里使用的包與上面類似,因為是json文件,所以還用了json這個包(解析json),主要內容如下:
程序運行截圖如下,前羨已經成功抓取到數據:
至此,這里就介紹完了這2種數據的抓取,包括靜態數據和動態數據。總的來說,這2個示例不難,都是入門級別的爬蟲,網頁結構也比較簡單,最重要的還是要會進行抓包分析,對頁面進行分析提取,後期熟悉後,可以藉助scrapy這個框架進行數據的爬取,可以更方便一些,效率更高,當然,如果爬取的頁面比較復雜,像驗證碼、加密等,這時候就需要認真分析了,網上也有一些教程可供參考,感興趣的可以搜一下,希望以上分享的內容能對你有所幫助吧。
⑵ python爬蟲怎麼獲取到的網站的所有url
首先我們可以先獲取要下載圖片的整個頁面信息。
getjpg.py
#coding=utf-8
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
print html
Urllib 模塊提供了讀取web頁面數據的介面,我們可以像讀取本地文件一樣讀取www和ftp上的數據。首先,我們定義了一個getHtml()函數:
urllib.urlopen()方法用於打開一個URL地址。
read()方法用於讀取URL上的數據,向getHtml()函數傳遞一個網址,並把整個頁面下載下來。執行程序就會把整個網頁列印輸出。
⑶ 【壹】Python爬蟲入門——認識URL
【系列前言】前段時間李響同學入門了一些Python的基礎知識,覺得一直在IDLE里print一些演算法題有一些枯燥,所以決定通過學習爬蟲來提高自己的興趣。而且最近確實有一些重復性勞動,想使用爬蟲簡化工作。遂打算邊自學邊寫自己自學的過程,一方面作為小白的我可以和其他Python大神交流,一方面也可以以此監督自己。
【本人使用Python版本:2.7.5】
首先按理解一下爬蟲(Spider),如果把一個站點比作一張縱橫交錯的蜘蛛網,那麼我們爬蟲要做的就是在這張網上爬來爬去,獲得這張網上的信息和資源。而Web上每種資源,比如HTML文檔、圖片、視頻等都由一個URI(Universal Resource Identifier,通用資源標志符)進行定位。 URL(Uniform Resource Locator,統一資源定位符)是URI的子集。採用URL可以用一種統一的格式來描述各種信息資源,包括文件、伺服器的地址和目錄等。而爬蟲主要的處理對象就是URL。所以務必要對URL有一定的熟悉。
URI通常由三部分組成:
1.訪問資源的命名機制;
2.存放資源的主機名;
3.資源自身 的名稱,由路徑表示。
URL的格式由三部分組成:
1.第一部分是協議(或稱為服務方式)。
2.第二部分是存有該資源的主機IP地址(有時也包括埠號)。
3.第三部分是主機資源的具體地址,如目錄和文件名等。
知乎:HTTP 協議中 URI 和 URL 有什麼區別?@西毒 的回答
最近在搞挑戰杯可能會有點忙,但還是希望自己能按照計劃學習,定期更新此系列。
⑷ python爬蟲之urllib_get
from urllib import request
import ssl
url = ' http://www..com/'
"""
url, 請求的目標url地址
data=None,默認情況為咐胡None,表示發起的是一個get請求,不為None,則發起的是一個post請求
timeout=,設置請求的超時時間
cafile=None, 設置證書
capath=None, 設置證書路徑
cadefault=False, 是否要使用默認證書(默認為False)
context=None:是一個ssl值,表示忽略ssl認證
"""
content = ssl._create_unverified_context()
response = request.urlopen(url,timeout=10,content=content)
code = response.status
print(code)
b_html = response.read()
print(type(b_html),len(b_html))
res_headers = response.getheaders()
print(res_headers)
cookie_data = response.getheader('Set-Cookie')
print(cookie_data)
reason = response.reason
print(reason)
str_html = b_html.decode('utf-8')
print(type(str_html))
with open('b_.page.html','w') as file:
# file.write(b_html)
file.write(str_html)
"""
url:發起請求的url地址
data=None, 默認情況為None,表示發起的是一個get請求,不為None,則發起的是一個post請求
headers={},設置請求頭(headers對應的數據類型是一個字典)
origin_req_host=None, (指定發起請求的域)
unverifiable=False,忽略SSL認證
method=None:指定發起請求的方式
"""
req_header = {
'User-Agent'衡茄攔:'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
req = request.Request(url,headers=req_header)
response = request.urlopen(req)
response.status
response.read()
response.getheaders()
response.getheader('Server')
response.reason
python2中:對於字元納枯串和bytes類型的數據沒有明顯的區分
python3中:對於字元串和bytes類型的數據有明顯的區分
將bytes類型的數據轉換為字元串使用decode('編碼類型')
將字元串轉換為bytes類型的數據使用encode('編碼類型')
bytearray和bytes類型的數據是有區別的:前者是可變的,後者是不可變的