GlidedSky爬虫学习探索之旅(一)

两篇博客介绍了使用Pyppeteer模块进行网页爬虫的基础练习。第一题涉及抓取单一页面内的数字并求和,通过观察XPath规律实现。第二题扩展到多页面爬取,遍历1000页,每页抓取12个数字求和。两篇博客均包含登录操作和异步处理。
摘要由CSDN通过智能技术生成

学习网址: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=2999页: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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

merlin’s girl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值