HTML文本解析
HTML文本解析
一、Xpath解析數(shù)據(jù)
1、解析庫lxml安裝
(1)windows下安裝:
pip install lxml如果沒有報錯,說明安裝成功。
如果出錯,例如:提示缺少libxml2,則可以采用wheel方式安裝。可以到以下鏈接下載對應(yīng)wheel(網(wǎng)址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml),找到與Python版本和系統(tǒng)對應(yīng)的lxml版本,如:Windows64、Python3.6,就選擇lxml?3.8.0?cp36?cp36m?win_amd64.whl,將其下載到本地。最后使用pip安裝:
pip install lxml?3.8.0?cp36?cp36m?win_amd64.whl(2)Linux下安裝:
pip install lxml(3)Mac下安裝:
pip install lxml如果出現(xiàn)錯誤,可以執(zhí)行如下命令安裝必要的庫;
xcode-select –install注意:XPath是一個解析語言,只有安裝解析庫才可以對網(wǎng)頁數(shù)據(jù)進行解析;
2、XPath的一些用法
(1)標簽內(nèi)容的提取:
eg:
name = oneSelector.xpath("div/div[@class = \"info\"]/div[@class = \"hd\"]/a/span[1]/text()")[0]注:
1、在標簽的選擇里面,選擇到目標標簽,在標簽的后面加上/text()*,即獲得目標標簽的文本內(nèi)容;*
2、若要獲取目標標簽屬性的內(nèi)容,則需要選擇到目標標簽,然后在標簽的后面加上/@屬性值;**
3、xpath獲取的標簽內(nèi)容都是以列表的形式存在,若需要對獲取內(nèi)容處理(字符串),則需要在獲取到的列表標簽中加上[第幾個]*,得到的內(nèi)容為字符串類型。*
二、BeautifulSoup解析數(shù)據(jù)
1、安裝BeautifulSoup
pip install beautifulsoup4這個包兼容Python2和Python3
2、解析器
默認用lxml,因為效率高
數(shù)據(jù)持久化存儲
一、將數(shù)據(jù)保存于文件
1、數(shù)據(jù)保存于文件中
保存數(shù)據(jù)最簡單的方法就是使用Python的文件操作函數(shù),將數(shù)據(jù)保存于csv、txt等文件中,Python的文件操作函數(shù)主要有:
- f.open(): 打開文件
- f.write(): 寫入文件
- f.close(): 關(guān)閉文件
當配合with一起使用時,我們無需關(guān)心文件關(guān)閉的問題,系統(tǒng)自動關(guān)閉,如:
with open(“douban.csv”) as f:
二、使用MySQL持久化數(shù)據(jù)
1、MySQL介紹
MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言–結(jié)構(gòu)化查詢語言(SQL)進行數(shù)據(jù)庫管理。它應(yīng)用及其廣泛,它開源免費、高效、可移植性好。像阿里巴巴、去哪兒、騰訊等知名互聯(lián)網(wǎng)公司都有在使用MySQL數(shù)據(jù)庫。
2、Python連接MySQL的基本格式
oneMovie = [name, score, num]allMovieslist.append(oneMovie)for i in allMovieslist:# print(i)# 連接到本地MySQL數(shù)據(jù)庫# 新版數(shù)據(jù)連接要加最后一個參數(shù) pymysql.cursors.DictCursor表示字典類型 pymysql.cursors.Cursor表示數(shù)組類型conn = pymysql.connect(host='localhost', user='root', passwd='123456', database='douban',cursorclass=pymysql.cursors.DictCursor)# 獲取游標cursor = conn.cursor()try:cursor.execute("insert into movies(name, star, num1) values ('%s', %s, %s)"%(i[0], float(i[1]), int(i[2])))conn.commit()except Exception as e:print(e)# 回滾conn.rollback()conn.close()Selenium語法
1、聲明瀏覽器對象
Selenium支持很多瀏覽器,如Chrome、Firefox、IE、Opera、Safari等,還有Android、BlackBerry等手機端的瀏覽器。selenium.webdriver 模塊提供了所有瀏覽器的驅(qū)動(WebDriver),可以生成不同瀏覽器的對象。
下面是聲明不同瀏覽器對象的實現(xiàn)代碼:
from selenium import webdriverdriver = webdriver.Chrome() #聲明Chrome瀏覽器對象 driver = webdriver.ie() #聲明ie瀏覽器對象 driver = webdriver.firefox() #聲明firefox瀏覽器對象 driver = webdriver.phantomjs()#聲明phantomjs瀏覽器對象 driver = webdriver.safari() #聲明safari瀏覽器對象2、訪問頁面
可以使用get方法實現(xiàn)頁面的訪問:
driver.get("url") # 請求頁面3、獲取頁面代碼
使用driver的page_source屬性回去頁面的HTML代碼:
# 獲取代碼 HTML = driver.page_source4、定位元素
當獲取到HTML代碼后,就需要定位到HTML的各個元素,以便提取數(shù)據(jù)或者對該元素執(zhí)行諸如輸入、點擊操作。WebDriver 提供了大量的方法查詢頁面中的節(jié)點,這些方法形如:find_element_by_*。
以下為Selenium查找單個節(jié)點的方法。
drivr.find_element_by_id:# 通過ID查找 drivr.find_element_by_name:# 通過NAME查找 drivr.find_element_by_xpath:# 通過xpath選擇器查找 drivr.find_element_by_link_text:# 通過鏈接的文本查找(完全匹配) drivr.find_element_by_partial_link_text:# 通過鏈接的文本查找(部分匹配) drivr.find_element_by_tag_name:# 通過標簽名查找 drivr.find_element_by_class_name:# 通過CLASS查找 drivr.find_element_by_css_selector:# 通過css選擇器查找5、頁面交互
Selenium可以模擬用戶對頁面執(zhí)行一系列操作,如輸入數(shù)據(jù)、清除數(shù)據(jù)、單擊按鈕等。以下代碼實現(xiàn)了定位到搜索框后,清空搜索框中的文字,輸入“iphone”,回車的功能。
input = driver.find_element_by_id("searchKeywords")#查找節(jié)點 input.clear()#清除輸入框中默認文字 input.send_keys("iphone")#輸入框中輸入“iphone” input.send_keys(Keys.RETURN)#回車功能6、執(zhí)行JavaScript
Selenium并未提供所有的頁面交互操作方法,例如爬蟲中用得最多的下拉頁面(用于加載更多內(nèi)容)。Selenium提供了execute_script()方法,用于執(zhí)行JS,這樣我們就可以通過JS代碼實現(xiàn)這些操作了。以下代碼實現(xiàn)了將頁面下拉到底部的功能。
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')總結(jié)
- 上一篇: 上海东华计算机分数线,2020年东华大学
- 下一篇: HDU6638 Snowy Smile