学习网址:http://www.glidedsky.com/,使用pyppeteer模块进行爬虫。
题一:爬虫-基础1
分析题目:
该题目为基础题,所有的数字都在一个页签里,且页签源码里的内容就是展示的内容,所以仅仅需要抓取数字对应的标签并获取到text值再累加起来就可以。
观察数字对应的标签xpath的规律:
217对应的xpath://*[@id="app"]/main/div[1]/div/div/div/div[1]
335对应的xpath://*[@id="app"]/main/div[1]/div/div/div/div[3]
216对应的xpath://*[@id="app"]/main/div[1]/div/div/div/div[26]
可以看出仅是最后一个div[]中的数字在累加。
编写代码:
#coding:utf-8
import asyncio,pyppeteer
async def main():
brower = await pyppeteer.launch()
page = await brower.newPage()
await page.goto("http://www.glidedsky.com/level/web/crawler-basic-1")
#登录
address = "user"#需要先登录用户才可以查看具体题目
passwd = "passwd"#用户对应的密码
await page.type('#email',address)
await page.type("#password",passwd)
button = (await page.xpath('//*[@id="app"]/main/div[1]/div/div/div/div[2]/form/div[4]/div/button'))[0]#登录按钮
await button.click()
await asyncio.sleep(3.0)
sum = 0
for i in range(1,1201):#一共有1200个数字
item = await page.xpath('//*[@id="app"]/main/div[1]/div/div/div/div[{0}]'.format(i))
value = await (await item[0].getProperty("textContent")).jsonValue()
# print(str(value).strip())
sum += int(str(value).strip())
print(sum)
await brower.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
题二:爬虫-基础2
分析题目:
该题目相对题一,仅是把数字都分到了1000页中,仅需要观察每页的html间的区别,找出规律即可。
第2页:http://www.glidedsky.com/level/web/crawler-basic-2?page=2
第999页:http://www.glidedsky.com/level/web/crawler-basic-2?page=999
所以区别在于page=?从1-1000遍历。每页中仅显示了12个数字。
编写代码:
#coding:utf-8
import asyncio,pyppeteer
from threading import Thread
async def main():
brower = await pyppeteer.launch(headless=True)
page = await brower.newPage()
await page.goto("http://www.glidedsky.com")
#登录
address = "user"
passwd = "passwd"
await page.type('#email',address)
await page.type("#password",passwd)
button = (await page.xpath('//*[@id="app"]/main/div[1]/div/div/div/div[2]/form/div[4]/div/button'))[0]
await button.click()
await asyncio.sleep(3.0)
sum = 0
for num in range(1,1001):
page_str = "http://www.glidedsky.com/level/web/crawler-basic-2?page={0}".format(num)
try:
await page.goto(page_str)
# await asyncio.sleep(2.0)
except:
print(page_str)
for i in range(1,13):
item = await page.xpath('//*[@id="app"]/main/div[1]/div/div/div/div[{0}]'.format(i))
value = await (await item[0].getProperty("textContent")).jsonValue()#获取text值
# print(str(value).strip())
sum += int(str(value).strip())
print(sum)
await brower.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())