GlidedSky爬虫网站练习基础1

GlidedSky爬虫网站练习第一关

无意中看到一个很不错的爬虫练习网站:

GlidedSky爬虫练习网站
是一个很不错的练习网站,但是先需要注册一下。
第一关是把网页中的数据求和,因为格式统一,所以可以用很多方法实现,
在使用GET方法时,要加入User-Agent和cookie。
*介绍了re,bs4,xpath,css,selenium自动化方法爬取信息。
*selenium自动化测试参考文献

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自动化爬取页面,需要等待几秒


 


上一篇:转载:WPF MVVM之INotifyPropertyChanged接口的几种实现方式


下一篇:Strut 2.3.1.2单元测试,如何使用getContext()删除Spring相关性vs NPE