第一关是算是入门级的操作了。唯一比较麻烦的是,你直接用requests获取url的响应数据是不行的,网站要求你登录。
这个时候我们一般有两种方法,一种是手动在Headers头部信息里添加Cookie,另一种是使用selenium自动化登录网页。
Cookie:自行去浏览器里的Headers里复制粘贴到*处。
import requests
url='http://www.glidedsky.com/level/web/crawler-basic-1'
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
'Cookie': '***'
}
html=requests.get(url,headers=headers).content.decode()
Selenium:先把Chrome浏览器的驱动拷贝到目录下,然后填写*处的账号密码。
from selenium import webdriver
bro=webdriver.Chrome(executable_path='../chromedriver.exe')
bro.get('http://www.glidedsky.com/level/web/crawler-basic-1')
find_username=bro.find_element_by_id('email')
find_password=bro.find_element_by_id('password')
find_login=bro.find_element_by_css_selector('.btn')
find_username.send_keys('***')
find_password.send_keys('***')
find_login.click()
html=bro.page_source
之后使用xpath定位到数字所在的数据:
from lxml import etree
tree=etree.HTML(html)
find_num=tree.xpath("//*[@id='app']/main/div[1]/div/div/div/div/text()")
find_nums="".join(find_num)
但是采集到的数据是携带空格的,所以我们使用正则表达式清洗一下:(只提取获取到数据的数字部分)
number_list=re.findall('\d+',find_nums)
这时候拿到的就是储存所有数字的列表,最后写一个循环就可以求和啦!
写这个不是为了让大家抄答案,希望大家一些细节想不明白的时候过来看看能解决问题,主要还是要自主思考。