GlidedSky爬蟲網站練習第一關
無心中看到一個很不錯的爬蟲練習網站:css
GlidedSky爬蟲練習網站
是一個很不錯的練習網站,可是先須要註冊一下。
第一關是把網頁中的數據求和,由於格式統一,因此能夠用不少方法實現,
在使用GET方法時,要加入User-Agent和cookie。
*介紹了re,bs4,xpath,css,selenium自動化方法爬取信息。
*selenium自動化測試參考文獻
html
import requests import re from fake_useragent import UserAgent # 導入隨機頭headers from lxml import etree from bs4 import BeautifulSoup def get_html(url): # 隨機生成headers headers = {'User-Agent': UserAgent().random, 'cookie': '你的cookie'} try: # 獲取url響應 response = requests.get(url, headers=headers) # 不是200,產生異常 response.raise_for_status() # 將編碼設置爲文章內容編碼 response.encoding = response.apparent_encoding return response.text except: return def html_infos(html): num = 0 # 正則匹配 # infos爲獲取到數據信息列表 infos = re.findall(r'<div class="col-md-1">(.*?)</div>', html, re.S) # 循環列表,逐一取出相加 for info in infos: num += int(info.strip()) print(num) # bs4匹配 soup = BeautifulSoup(html, 'lxml') infos = soup.find_all('div', class_="col-md-1") for info in infos: info = info.text.strip() num += int(info) print(num) # xpath匹配 infos_txt = etree.HTML(html) # 解析html infos = infos_txt.xpath('//div[@class="col-md-1"]') for info in infos: info = info.text.strip() num += int(info) # css匹配 infos_txt = etree.HTML(html) infos = infos_txt.cssselect('.row>.col-md-1') for info in infos: num += int(info.text.strip()) print(num) if __name__=='__main__': url = 'http://www.glidedsky.com/level/web/crawler-basic-1' # url返回text賦給html html = get_html(url) html_infos(html) ------------------------------------------------------------------------------------- # 如下是用selenium自動化爬取網頁 from selenium import webdriver from selenium.webdriver.common.by import By # 用於指定HTML文件中的DOM標籤元素 from selenium.webdriver.support.ui import WebDriverWait # 等待網頁加載完成 from selenium.webdriver.support import expected_conditions as EC # 指定等待頁面加載結束 driver = webdriver.Chrome() # 實例化瀏覽器對象 url = 'http://www.glidedsky.com/login' driver.get(url) # 打開網頁 driver.maximize_window() # 全屏顯示 #等待頁面加載完成 WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'form-control'))) #登陸頁面,實現selenium自動化登陸 #須要提早在網站註冊個帳號 user = driver.find_element_by_id('email') user.click() user.send_keys('你的帳號') password = driver.find_element_by_id('password') password.click() password.send_keys('你的密碼') #點擊登陸按鈕 login = driver.find_element_by_css_selector( '#app > main > div.container > div > div > div > div.card-body > form > div.form-group.row.mb-0 > div > button') login.click() #進入爬蟲第一關練習 spider1 = driver.find_element_by_xpath('//[@id="app"]/main/div[1]/div/div/table/tbody/tr[1]/td[1]/a') spider1.click() # 點擊待爬取頁面 url1 = driver.find_element_by_xpath('//*[@id="app"]/main/div[1]/div/div/div/div/a').get_attribute('href') driver.get(url1) num = 0 infos = driver.find_elements_by_class_name('col-md-1') for info in infos: info = info.text.strip() num += int(info) print(num) # 以上就是selenium自動化爬取頁面,須要等待幾秒