1、問題html
本次利用selenium自動化測試,完成對淘寶的爬取,這樣能夠避免一些反爬的措施,也是一種爬蟲經常使用的手段。本次實戰的難點:python
1.如何利用selenium繞過淘寶的登陸界面web
2.獲取淘寶的頁面內容實現翻頁,並判斷是否翻頁成功。chrome
3.獲取每一頁的信息,實現數據的抓取工做。api
4.環境python3.6,對應的Chrome的webdriver驅動網址:http://chromedriver.storage.googleapis.com/index.html,將本身對應的webdriver放入scripts的環境內。測試
2、解決google
1.在登陸淘寶界面的時候,會彈出界面窗口,須要捕捉當前的頁面,判斷是否有變化。url
先用self.browser【驅動名稱】.current_window_handle來捕獲當前的界面信息。spa
用self.browser【驅動名稱】.switch_to_window(now_handle),來進行頁面變化的判斷code
self.browser.get(self.url) input_content = self.wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#q')) ) submit = self.wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_TSearchForm > div.search-button > button")) ) now_handle = self.browser.current_window_handle input_content.send_keys(self.key) submit.click() self.browser.switch_to_window(now_handle)
2.在當前頁碼的判斷,肯定是否翻頁成功。
獲取輸入標籤的值,和點擊按鈕,完成翻頁動做,再用EC.text_to_be_present_in_element來檢測是否完成了翻頁的動做。
print("正在翻第{0}頁".format(number)) input_content = self.wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')) ) submit = self.wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit")) ) input_content.clear() input_content.send_keys(number) submit.click() self.wait.until( EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(number)) ) self.get_content()
3.利用選擇器獲取整個頁面的內容:
利用xpath進行解析,也能夠利用pyquery等一系列的解析方式進行解析。
self.wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > div > div > div:nth-child(1)')) ) html = self.browser.page_source content_text = etree.HTML(html) names = content_text.xpath('*//div[@class="pic"]/a/img/@alt') srcs = content_text.xpath('*//div[@class="pic"]/a/img/@data-src') totals = [(name, src) for (name, src) in zip(names, srcs)]
3、結果呈現
4、總結
本項目利用了selenium來完成數據的自動爬取,須要注意獲取的數據元素,以及數據信息。
重點在於彈出頁面的判斷以及對翻頁成功的判斷,其他的內容就是通常的數據爬取的方式。淘寶實戰須要對webdriver有必定的基礎和了解。才能夠正確獲取到標籤內容。
webdriver的參考文檔:
https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains