数据爬取----猿著

数据爬取----猿著
import requests
import json
from lxml import etree


class Yz():
    # 请求的地址猿著: https://www.lmonkey.com/essence
    url = 'https://www.lmonkey.com/essence'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
    }

    # 爬取的数据
    data = ''

    # 存储到文件的地址
    filepath = './yz.json'

    # 初始化
    def __init__(self):
        # 发送请求
        result = requests.get(url=self.url, headers=self.headers)
        print(result.status_code)
        if result.status_code == 200:
            # 将请求的内容写入文件
            # ./代表当前目录
            with open('./yz.html', 'w', encoding='utf-8') as fp:
                fp.write(result.text)
            if self.parsedata():
                self.writedata()

    # 解析分析数据
    def parsedata(self):
        # 解析数据
        html = etree.parse('./yz.html', etree.HTMLParser())

        # 提取数据,需要文章标题,文章url,作者
        authors = html.xpath('//div[contains(@class,"old_content")]//div[contains(@class,"flex-fill")]/p/strong/a/text()')
        titles = html.xpath('//div[contains(@class,"old_content")]//div[contains(@class,"flex-fill")]//div[contains(@class,"topic_title")]//text()')
        title_urls = html.xpath('//div[contains(@class,"old_content")]//div[contains(@class,"flex-fill")]/a[2]/@href')

        # res = zip(authors, titles, title_urls)
        # print(list(res))
        # print(*zip(authors, titles, title_urls))   # 同上两行代码结果相同

        data = []
        for i in range(0, len(authors)):
            res = {'author': authors[i], 'title': titles[i], 'title_url': title_urls[i]}
            data.append(res)
        self.data = data
        return True

    # 将数据写入文件/数据库
    def writedata(self):
        # 将提取到的数据写入文件,最好写入数据库
        with open(self.filepath, 'w', encoding='utf-8') as fp:
            json.dump(self.data, fp, ensure_ascii=False)   # ensure_ascii=False 解决json中文乱码问题

# 实例化对象
Yz()

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk