內(nèi)容簡(jiǎn)述:? ? ?? ??? ??
? ??一:Bs4? ? ? ?
? ??二:jsonpath? ? ?? ??
? ??三:selenium庫(kù)? ? ? ??
一:bs4(BeautifulSoup)
1-bs4解析器
? ??概述:
? ?? ? ????和lxml相同點(diǎn):是html和xml解析器,主要功能也是解析和提取數(shù)據(jù)邓线。
? ? ? ? ? ? ? ? ? ? 不同點(diǎn):bs4效率沒(méi)有l(wèi)xml的效率高苍蔬,但其API接口靈活好用
????? 官方文檔: http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0
????? 安裝:pip install bs4
????? 工具對(duì)比:? ?
?? ?? 使用:
??????? from bs4 import BeautifulSoup?
????????A-網(wǎng)上文件生成對(duì)象
?????????? ????????soup = BeautifulSoup('網(wǎng)上下載的字符串', 'lxml')
??????? B-本地文件生成對(duì)象
?????????????????? soup =BeautifulSoup(open('bs4_test.html'), 'lxml')
?? 2-bs4解析器規(guī)則:
????? ? 按標(biāo)簽名查找
??????? ?????????soup.a? soup.title??? 注意:只能找到第一個(gè)
????? ? 節(jié)點(diǎn)屬性
??????? ?????????name:獲取標(biāo)簽名的 attrs: 將屬性作為一個(gè)字典返回
????? ? 獲取節(jié)點(diǎn)屬性值(3種方式)
??????? ?????????obj.attrs.get('title') obj.get('title') obj['title']
????? ? 獲取節(jié)點(diǎn)內(nèi)容? ? obj.string?? obj.get_text()
? ? ? 【溫馨提示】
`?????? ????a-如果內(nèi)容中有注釋,string會(huì)獲取到注釋的值洒忧,
? ? ? ? ? ? ? ? get_text()獲取不到注釋內(nèi)容运授,但可以獲取非注釋內(nèi)容
??????????? b-如果內(nèi)容中有標(biāo)簽烤惊,string返回None,get_text()返回文本內(nèi)容吁朦。
? ? ? ? ? ? ? ? 判斷獲取的內(nèi)容是不是注釋的內(nèi)容
??????????????????? if type(obj.string) ==bs4.element.Comment:
??????? 獲取【直接子】節(jié)點(diǎn)
?????????? ????contents?? 返回的是一個(gè)列表 【注】中間有換行符
??????? 獲取【子孫】節(jié)點(diǎn)
?????????? ????descendants? 返回的是一個(gè)生成器??通過(guò)for in進(jìn)行迭代即可
?? 3-bs4解析器-方法
??????? find(返回的是一個(gè)對(duì)象)
?????????? ????find('a')?? 返回第一個(gè)a標(biāo)簽
?????????????? find('a', title='名字')?? find('a',class_='名字')
??????? find_all(返回的是一個(gè)列表)
?????????????? find_all('a')? 查找到所有的a
?????????? ????find_all(['a', 'span'])? 返回所有的a和span
?????????? ????find_all('a', limit=2)? 只找前兩個(gè)a
??????? select(根據(jù)選擇器得到節(jié)點(diǎn)對(duì)象)
?????????? ????【溫馨提示】返回一個(gè)列表柒室,列表中都是對(duì)象,需要進(jìn)行篩選
? ? ? ? ?選擇器:
????????????? 標(biāo)簽選擇器?????標(biāo)簽名:???
????????????? 類選擇器? ? ? ? .類名
????????????? id選擇器? ? ? ? ? #id名?
????????????? 層級(jí)選擇器??標(biāo)簽名 .類名?? #id名 .類名
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 標(biāo)簽名 > .類名 >????#id名
?????????? ?【溫馨提示】中間是空格逗宜,返回子類或者子孫類;中間是>返回直接子類
????????????? 屬性選擇器?input[type="text"]?
????????????????????????radio? checkbox?submit? password? select?option
4-bs4解析器示例: 糗事百科-簡(jiǎn)單獲取(一條數(shù)據(jù))
5-bs4前程無(wú)憂批量爬取:
二:jsonpath(了解)
?? JsonPath是一種信息抽取類庫(kù)雄右,是從JSON文檔中抽取指定信息的工具。
????????????提供多種語(yǔ)言實(shí)現(xiàn)版本纺讲,包括:Javascript,Python擂仍,PHP 和 Java。
????????????JsonPath 對(duì)于 JSON 來(lái)說(shuō)熬甚,相當(dāng)于 XPATH 對(duì)于 XML和HTML
? ?簡(jiǎn)單來(lái)講:解析json字符串逢渔,抽取需要的內(nèi)容。
?? pip安裝:pip install jsonpath
?? JsonPath對(duì)比XPATH:
? ? ? ? BookStore.json文件如下
? ? ? ? ?{"store": {"book": [ {"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price": 8.95 }, {"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price": 12.99 }, {"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price": 8.99 }, {"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price": 22.99 } ],"bicycle": {"color":"red","price": 19.95 } }}?
? ? ? ? ? json.loads(): json字符串 ==> python對(duì)象
????????? json.dumps(): python對(duì)象==> json字符串
????? ????json.load():讀取json格式的文本乡括,轉(zhuǎn)化為python對(duì)象
????? ????json.dump():將python對(duì)象寫(xiě)入到文本中
三:selenium庫(kù)-自動(dòng)化測(cè)試工具
? ? ? ? ?Selenium是一個(gè)Web的自動(dòng)化測(cè)試工具, 可根據(jù)我們的指令讓瀏覽器自動(dòng)加載
????????頁(yè)面肃廓,獲取需要的數(shù)據(jù),包括頁(yè)面截屏及判斷網(wǎng)站上某些動(dòng)作是否發(fā)生等等诲泌。
????????自己不帶瀏覽器通常和第三方瀏覽器結(jié)合使用?
????安裝:pip3 install selenium
????官方文檔:http://selenium-python.readthedocs.io/index.html
????????WebDriver:屬于SeleniumAPI盲赊,可以像 BeautifulSoup一樣用來(lái)查找頁(yè)面元素
與頁(yè)面上的元素進(jìn)行交互 (發(fā)送文本、點(diǎn)擊等)敷扫,以及執(zhí)行其他動(dòng)作來(lái)運(yùn)行網(wǎng)絡(luò)爬蟲(chóng)哀蘑。
?? 通過(guò)selenium操作谷歌瀏覽器:
????? 下載操作谷歌瀏覽器驅(qū)動(dòng)的頁(yè)面
??????? ????????http://chromedriver.storage.googleapis.com/index.html
????? 谷歌驅(qū)動(dòng)和谷歌瀏覽器版本之間的映射表
??????? ????????http://blog.csdn.net/huilan_same/article/details/51896672
?? 常見(jiàn)選擇方法:
????????? browser.find_element_by_id()?
????? ????browser.find_elements_by_name()?
????? ????browser.find_elements_by_xpath()???
????? ????browser.find_elements_by_tag_name()?
? ? ? ? ??browser.find_elements_by_css_selector()?
? ? ? ? ? browser.find_elements_by_link_text()
????? ????browser.find_elements_by_class_name()?
四:作業(yè)
?? 1-完成課堂代碼
? ?2-使用selenium打開(kāi)百度==hao123==>點(diǎn)擊==》后退==》再百度帥哥==》
? ? ? 圖片==》前進(jìn)==》后退==》退出
? ?3-分別使用xpath和bs4批量下載糗事百科糗圖里面的內(nèi)容