爬蟲學習筆記(1)-- 利用Python從網頁抓取數據

最近想從一個網站上下載資源,懶得一個個的點擊下載了,想寫一個爬蟲把程序所有下載下來,在這裏作一個簡單的記錄css

Python的基礎語法在這裏就很少作敘述了,黑馬程序員上有一個基礎的視頻教學,能夠跟着學習一下html

本篇博客爲基礎章:利用Python從網頁端抓取數據,閒話很少說,開始正題:python

首先須要學習這幾個模塊:git

1 webbrowser:Python自帶的模塊,打開瀏覽器獲取到指定的頁面程序員

2 requests:從英特網上下載文件和網頁github

3 Beautiful Soup:解析HTML,即網頁編寫的格式web

4 selenium:啓動並控制一個Web瀏覽器。selenium可以填寫表單,並模擬鼠標在這個瀏覽器上點擊shell

 

1 webbrowser模塊:瀏覽器

能夠利用.open()方法打開指定的Url。例如在idea中輸入以下代碼:ide

運行Python文件,系統會自動打開一個瀏覽器,打開百度

 2  requests模塊:

這是一個第三方模塊,須要先從網上下載:

 我在Python的運行環境下報錯:

切換到cmd環境:

安裝成功,在項目中加載requests模塊:

 1 import requests  2 # 調用requests.get()下載文件
 3 res = requests.get('http://www.gutenberg.org/files/57156/57156-h/57156-h.htm')  4 # 確保程序正在下載失敗時候中止
 5 res.raise_for_status()  6 # Python文件使用「wb」方式打開,寫入字符串會報錯,由於這種打開方式爲:
 7 # 以二進制格式打開一個文件只用於寫入。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。
 8 playFile = open('test.txt','wb')  9 # 利用iter_content()方法作循環
10 # 一段爲10000字節
11 for chuck in res.iter_content(10000): 12  playFile.write(chuck) 13 playFile.close()
示例

這裏放兩個對於這個模塊寫的比較詳細的Blog:

2.1 快速上手

2.2 用法總結

3 Beautiful Soup模塊:

用於從html中提取元素信息

首先安裝第三方模塊:

在項目中加載

首先在項目中添加名爲example的html網頁,代碼以下:

<html><head><title>The Website Title</title></head>
<body>
<p>Download my <strong>Python</strong> book from <a href="http://inventwithpython.com">my website</a>.</p>
<p class="slogan">Learn Python the easy way!</p>
<p>By <span id="author">Al Sweigart</span></p>
</body></html>
example

顯示效果以下:

示例代碼以下:

 1 import requests,bs4  2 
 3 exampleFile = open('example.html')  4 exampleSoup = bs4.BeautifulSoup(exampleFile.read(),"html.parser")  5 print('----------經過id----------')  6 # 返回一個帶有id = "author" 的元素,將這個Tag對象的列表保存在變量elems中
 7 elems = exampleSoup.select("#author")  8 print(type(elems))  9 # 列表中只有一個Tag對象,只有一次匹配
10 print(len(elems)) 11 print(type(elems[0])) 12 # 元素的文本
13 print(elems[0].getText()) 14 # 一個字符串,包含開始和結束標籤,以及該元素的文本
15 print(str(elems[0])) 16 # 字典,包含元素的屬性以及屬性值
17 print(elems[0].attrs) 18 print() 19 print('----------經過元素----------') 20 pelements = exampleSoup.select('p') 21 print(len(pelements)) 22 print(str(pelements[0])) 23 print(pelements[0].getText()) 24 print(str(pelements[1])) 25 print(pelements[1].getText()) 26 print() 27 print('----------經過屬性----------') 28 spqnelem = exampleSoup.select('span')[0] 29 print(len(spqnelem)) 30 print(str(spqnelem)) 31 print(spqnelem.get('id')) 32 print(spqnelem.attrs)
BeautifulSoup模塊

運行結果如圖所示:

值得一提的是,一開始在項目運行的時候嗎,爆出以下的錯誤:

解決方法很簡單,在調用bs4.BeautifulSoup()函數時添加「html.parser」參數

一些經常使用的css選擇器的模式:

CSS選擇器的例子
傳遞給select()方法的選擇器 將匹配爲...
 soup.select('div’)  全部名爲<div>的元素
  soup.select('#author’)  帶有id屬性爲author的元素
  soup.select('.notice’)  全部使用css class屬性爲notice的元素
  soup.select('div span’)  全部在<div>元素以內的<span>元素
  soup.select('div>span’)  全部直接在<div>元素以內的<span>元素,中間沒有其餘元素
  soup.select('input[name]’)  全部名爲<input>,並有一個name屬性,其值無所謂的元素
  soup.select('input[type = 'button']’)  全部名爲<input>,並有一個type屬性,其值爲button的元素

 

 

 

 

 

 

 

 

 

 

 

 

 

 

最後貼一個BeautifulSoup的文檔以便參考

4 selenium模塊:

該模塊可讓Python直接控制瀏覽器

首先導入模塊,方法與以前的略有不一樣,首先須要下載壓縮包,直接運行會報錯:

解壓後在當前文件夾運行pip install selenium,按住Shift,右鍵選擇在此處打開Powershell窗口

在項目中導入模塊,方法較以前幾個模塊,略有不一樣,示例代碼以下:

 1 from selenium import webdriver  2 import time  3 bo = webdriver.Firefox()  4 bo.get('https://www.baidu.com/')  5 # 模擬點擊頁面按鈕
 6 link = bo.find_element_by_partial_link_text('貼吧')  7 link.click()  8 # 模擬填寫表單並註冊
 9 bo.get('https://mail.qq.com/cgi-bin/loginpage') 10 bo.switch_to.frame('login_frame') 11 bo.find_element_by_css_selector('#switcher_plogin').click() 12 emailelem = bo.find_element_by_id('u') 13 emailelem.send_keys('帳號') 14 passelem = bo.find_element_by_id('p') 15 passelem.send_keys('密碼') 16 passelem.submit()
selenium

運行時報如下錯誤:

缺乏geckodriver文件,在這裏找到對應的版本後,下載以後解壓到Python.exe和FireFox所在的文件夾裏面便可

相關文章
相關標籤/搜索