如何使用python進行網頁爬取?

zhongpeijiaoyu發表於2020-08-06

  今天將使用python抓取一個股票市場資料的重要來源。我們將為此編寫一個刮板。使用該刮板,您將可以從一個平臺上刮刮任何公司的股票資料。如您所知,想使事情變得簡單,為此還將使用網路刮板,這將提高您的刮板效率。為什麼使用這個工具?該工具將幫助我們使用數百萬個旋轉代理來抓取動態網站,以免被阻止。它還提供了驗證碼清除功能。它使用無標題的chrome抓取動態網站。

  要求

  通常,網頁抓取分為兩個部分:

  通過發出HTTP請求獲取資料通過解析HTMLDOM提取重要資料

  庫和工具

  BeautifulSoup是一個Python庫,用於從HTML和XML檔案中提取資料。通過請求, 您可以非常輕鬆地傳送HTTP請求。網路抓取工具以提取目標網址的HTML程式碼。

  建立

  我們的設定非常簡單。只需建立一個資料夾並安裝BeautifulSoup和請求即可。要建立資料夾並安裝庫,請在給定命令下方鍵入。我假設您已經安裝了Python3.x。

  mkdirscraper

  pipinstallbeautifulsoup4

  pipinstallrequests

  現在,使用您喜歡的任何名稱在該資料夾中建立一個檔案。我正在使用scraping.py。

  首先,您必須註冊scrapingdogAPI。它將為您提供1000個免費積分。然後,只需在檔案中匯入BeautifulSoup和請求即可。像這樣。

  frombs4importBeautifulSoupimportrequestswww.zpedu.com/it/

  我們要抓的東西

  這是我們將提取的欄位列表:

  1.上一個收盤價

  2.開啟

  3.競標

  4.問

  5.天的範圍

  6.52周範圍

  7.音量

  8.平均卷

  9.市值

  10.Beta

  11.市盈率

  12.每股收益

  13.收益率

  14.預期股息和收益率

  15.除息日

  16.1y目標EST

  準備階段

  現在,由於我們具備了準備刮板的所有要素,因此我們應該對目標URL進行GET請求以獲取原始HTML資料。如果您不熟悉抓取工具,請敦促您仔細閱讀其文件。現在,我們將使用請求庫抓取YahooFinance的財務資料,如下所示。

  r=requests.get.text

  這將為您提供該目標URL的HTML程式碼。

  現在,您必須使用BeautifulSoup解析HTML。

  soup=BeautifulSoup(r,’html.parser’)

  現在,在整個頁面上,我們有四個“tbody”標籤。我們對前兩個感興趣,因為我們目前不需要第三和第四個“tbody”標籤中的可用資料。

  首先,我們將使用變數“湯”找出所有這些“身體”標籤。

  alldata=soup.find_all(“tbody”)

  如您所見,前兩個“tbody”具有8個“tr”標籤,每個“tr”標籤具有兩個“td”標籤。

  try:

  table1=alldata[0].find_all(“tr”)except:

  table1=Nonetry:

  table2=alldata[1].find_all(“tr”)except:

  table2=None

  現在,每個“tr”標籤都有兩個“td”標籤。第一個td標記由屬性的名稱組成,另一個具有該屬性的值。這有點像鍵值對。

  此時,我們將在開始for迴圈之前宣告一個列表和一個字典。

  l={}

  u=list()

  為了簡化程式碼,我將為每個表執行兩個不同的“for”迴圈。首先是“table1”

  foriinrange(0,len(table1)):

  try:

  table1_td=table1[i].find_all(“td”)

  except:

  table1_td=None

  l[table1_td[0].text]=table1_td[1].text

  u.append(l)

  l={}

  現在,我們要做的是將所有td標籤儲存在變數“table1_td”中。然後,我們將第一個和第二個td標籤的值儲存在“字典”中。然後,我們將字典推入列表。由於我們不想儲存重複的資料,因此我們將在最後將字典設為空。對於“table2”,將遵循類似的步驟。

  foriinrange(0,len(table2)):

  try:

  table2_td=table2[i].find_all(“td”)

  except:

  table2_td=None

  l[table2_td[0].text]=table2_td[1].text

  u.append(l)

  l={}

  然後,當您列印列表“u”時,您將得到一個JSON響應。

  {

  “Yahoofinance”:[

  {

  “PreviousClose”:“2,317.80”

  },

  {

  “Open”:“2,340.00”

  },

  {

  “Bid”:“0.00x1800”

  },

  {

  “Ask”:“2,369.96x1100”

  },

  {

  “Day’sRange”:“2,320.00–2,357.38”

  },

  {

  “52WeekRange”:“1,626.03–2,475.00”

  },

  {

  “Volume”:“3,018,351”

  },

  {

  “Avg.Volume”:“6,180,864”

  },

  {

  “MarketCap”:“1.173T”

  },

  {

  “Beta(5YMonthly)”:“1.35”

  },

  {

  “PERatio(TTM)”:“112.31”

  },

  {

  “EPS(TTM)”:“20.94”

  },

  {

  “EarningsDate”:“Jul23,2020—Jul27,2020”

  },

  {

  “ForwardDividend&Yield”:“N/A(N/A)”

  },

  {

  “Ex-DividendDate”:“N/A”

  },

  {

  “1yTargetEst”:“2,645.67”

  }

  ]

  }

  沒那麼神奇。我們僅在5分鐘的設定過程中就刮掉了Yahoo財務。我們有一個python物件陣列,其中包含亞馬遜公司的財務資料。這樣,我們可以從任何網站上抓取資料。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章