Requests
import requests
url=
'http://example.test/secret'`
response=
requests.get(url,auth
=
('dan'
,'h0tdish'
))`
response.status_code`
200
response.content`
u``'Welcome to the secret page!'
|
只是在調(diào)用方法的時候增加了一個auth關(guān)鍵字函數(shù)
我敢打賭你不用查文檔也能記住帆锋。
錯誤處理 Error Handling
Requests對錯誤的處理也是很非常方面掀亩。如果你使用了不正確的用戶名和密碼扰柠,urllib2會引發(fā)一個urllib2.URLError錯誤,然而Requests會像你期望的那樣返回一個正常的response對象炸枣。只需查看response.ok的布爾值便可以知道是否登陸成功击儡。
(https://www.jb51.net/article/63711.htm#)
>>> response
=
requests.get(url,auth``=``(``'dan'``,``'wrongPass'``))
>>> response.ok
False
|
使用selenium進行爬蟲
1适荣、挑選需求爬的URL地址,將其放入需求網(wǎng)絡(luò)爬蟲的隊列裆赵,也可以把爬到的符合一定需求的地址放入這個隊列中2、獲取一個url進行DNS解析跺嗽,獲取其主機IP3战授、針對這個url地址將其頁面加載下來(也就是這個頁面的html或者jsp)加載下來,不同的框架有不同的頁面處理方法桨嫁,和抽取有用信息的方法植兰,類似根據(jù)id選擇抽取,根據(jù)標簽抽取璃吧,根據(jù)class抽取楣导,根據(jù)css抽取等。4畜挨、最后Pipeline負責(zé)抽取結(jié)果的處理筒繁,包括計算彬坏、持久化到文件、數(shù)據(jù)庫等 在這里我們介紹一種十分方便的爬蟲工具:selenium膝晾,selenium爬蟲個人感覺適合對那種需求登錄的頁面進行爬取栓始,因為它本身可以加載瀏覽器驅(qū)動,模擬登錄這個操作血当,然后把需求的靜態(tài)頁面加載進來幻赚。
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser = webdriver.Firefox()
help(webdriver)
加載谷歌瀏覽器驅(qū)動,這里我使用的谷歌臊旭,你也可以下載firefox或者ie的驅(qū)動
使用什么驅(qū)動則模擬該操作的就是這個瀏覽器落恼,需要注意的是,chromedriver.exe對不同瀏覽器版本也是有自己版本的
browser = webdriver.Chrome("D:\driver\chromedriver.exe")
這里通過get請求需要模擬登錄的頁面
browser.get("https://crm.xiaoshouyi.com/global/login.action")
print(browser.page_source)
browser.switch_to_frame("page_source")
這里通過name選擇器獲取登錄名和密碼并把需要set值給放進去
browser.find_element_by_name("loginName").send_keys("你的登錄名")
browser.find_element_by_name("password").send_keys("你的登錄密碼")
這一步模擬點擊登錄
browser.find_element_by_class_name("pg-btn-submit").click()
browser.implicitly_wait(10)
time.sleep(5)
這一步模擬點擊某個a標簽連接
hrefs=browser.find_element_by_partial_link_text(u"客戶")
hrefs.click()
time.sleep(5)
我們可以通過browser.page_source把當(dāng)前頁面的靜態(tài)資源打印出來看看离熏,然后根據(jù)自己需求進行提取有用的資源
print(browser.page_source) 現(xiàn)在我們可以看到佳谦,我們已經(jīng)把頁面的靜態(tài)資源加載到了browser里面,我們可以開始根據(jù)自己的需求從browser里面拿自己需要的資源了滋戳,我這里先簡單介紹一下selenium的使用钻蔑,有關(guān)其具體選擇器和選擇方法,如下所示:
browser.find_element_by_id("id的name")
browser.find_element("")
browser.find_element_by_tag_name("標簽name")
browser.find_element_by_class_name("classname")
browser.find_element_by_css_selector("css選擇器奸鸯,cssname")
browser.find_element_by_partial_link_text("帶有鏈接的文本咪笑,獲取其跳轉(zhuǎn)地址,后面跟click事件可以模擬跳轉(zhuǎn)")
browser.find_element_by_xpath("里面可以跟正則表達式娄涩,XPath一般在實際自動化測試項目中用到比較多窗怒,其定位元素十分方便")此處例舉xpath用法:假如一個html是這個樣子的:<html>
<body>
<form id="myform">
<input name="name" type="text" />
<input name="pwd" type="password" />
<input name="continue" type="submit" value="Login" />
</form>
</body>
<html>我們需要用xpath定位他的pwd:
pwd =browser.find_element_by_xpath("http://form[input/@name='pwd']")---獲取form下input標簽中name為pwd的資源
pwd = browser.find_element_by_xpath("http://form[@id='loginForm']/input[2]")---獲取第二個input標簽的資源
pwd = browser.find_element_by_xpath("http://input[@name='pwd']")---直接獲取input為pwd的資源
xpat語法與bs4
xpth獲取屬性//a[@class="name"]/@img
獲取文本//a[@class="name"]/@img/text()
bs4獲取屬性
href = site.select('td a')[0].attrs['href']
獲取文本
catalog = site.select('td')[1].get_text()