爬虫-基础1 GlidedSky

GlidedSky 爬虫基础 1

爬虫的目标很简单,就是拿到想要的数据。这里有一个网站,里面有一些数字。任务是计算这些数字的总和。

待爬取网站

分析

我一般编写爬虫的流程:

1:检查 展现数据和原始数据是否一致。
2:寻找原始元素的位置。一般数据 会在 DOM文档中,json 文件中,js文件中,ws 等传输数据中。
3:直接发起请求,检查是否有反爬或者加密。
4:不能直接拿到数据,就使用 postman 完全模拟浏览器请求。
5:使用postman 完全模拟浏览器基本上都可以拿到数据的。
6:有加密就开始解密。 解密流程会复杂点。

1: 检查网页数据

检查 呈现数据原始数据 是否一致。 如图所示:可以发现 呈现数据和原始数据一致。

爬虫-基础1 GlidedSky_第1张图片

2: 寻找原始数据文件。

寻找原始数据使用 ”搜索“。
ctrl + F 或者 ctrl + shift + f, 然后输入想要查找的数据。

2.1 首先是 sources

对于这个 例子,已经直接可以拿到原始数据。所以,也就没有必要找 JS, json, ws 等文件了。
爬虫-基础1 GlidedSky_第2张图片

3. 验证能否直接拿到数据

直接使用 requests 库来进行模拟。

import requests

url = "http://glidedsky.com/level/web/crawler-basic-1"

res = requests.get(url)

print(res.text)

我们运行一下其实可以发现,我们是无法拿到原始数据的。这个时候不要慌,先尝试添加 headers , 然后再验证一下。

import requests

url = "http://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/89.0.4389.114 Safari/537.36",
    'cookies': "",
}

res = requests.get(url, headers=headers)

print(res.text)

这里需要添加自己的 cookies 信息,然后就可以拿到数据。

4. 解析

这个时候我们其实已经可以拿到原始的 html 文件了,并且包含了我们想要数据。这个时候,我们只需要增加一个页面解析就可以了。

我解析 html 页面一般使用 xpath 或者 re正则表达式。

这里 chorme 浏览器里面有一个 Xpath helper 插件。非常好用。

爬虫-基础1 GlidedSky_第3张图片

爬虫-基础1 GlidedSky_第4张图片

最后 xpath 的解析规则: xpath("//div[@class='col-md-1']/text()")
在这里插入图片描述

5. 完整代码

最后还是把 代码的结构改一下,方便重构复用啥的。

import requests
from lxml import etree


def download(url):
    headers = {
     
        'Cookie': "xxx", # 记得使用自己的 cookies
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }
    res = requests.get(url=url, headers=headers)
    return res.text


def analytics(content):
    html = etree.HTML(content)
    num_list = html.xpath("//div[@class='col-md-1']/text()")
    return num_list


def main(url):
    res = download(url)
    num_list = [int(item.strip()) for item in analytics(res)]
    return sum(num_list)


if __name__ == '__main__':
    base_url = "http://glidedsky.com/level/web/crawler-basic-1"
    sums = main(base_url)
    print(sums)

最后的答案 325740。 有啥问题可以私聊我,欢迎指出错误哦!!!

你可能感兴趣的:(python,python,爬虫,xpath)