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


最近想從一個網站上下載資源,懶得一個個的點擊下載了,想寫一個爬蟲把程序全部下載下來,在這里做一個簡單的記錄

Python的基礎語法在這里就不多做敘述了,黑馬程序員上有一個基礎的視頻教學,可以跟着學習一下

本篇博客為基礎章:利用Python從網頁端抓取數據,閑話不多說,開始正題:

首先需要學習這幾個模塊:

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

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

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

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

 

1 webbrowser模塊:

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

運行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所在的文件夾里面即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM