爬取微信公众号文章网上有两种思路,一种是基于搜狗搜索,但是这种我发现有个问题,因为它是根据搜索词的,所以你没办法指定搜索的结果只是某个公众号的,而且更大的问题是,它不是按时间排序的,所以你如果是想爬最新的就会很麻烦。而基于微信公众号API的方式就很好弥补了这种缺陷,但是它同时有一个问题,就是它需要的东西有一定门槛,对于没有计算机基础知识的人来说使用起来比较麻烦。
前期准备 登录微信公众号 在新建一个文本的时候,点击超链接选项, 打开F12进入调试模式, 弹出的东西叫工作台。 在弹出页面中账号选择其他账号,输入想查询的公众号,点击查询后,会出现这个公众号近期的文章。 在工作台上面找到network或者网络,点击Fetch/XHR询找一个名字开头appmsgpublish的文件,然后点开。 在header找到一个叫cookie的字段,复制旁边的值;在payload里面找到fakeid和token 调用API url = "https://mp.weixin.qq.com/cgi-bin/appmsg" cookie = "" # 你的cookie fakeid = "" # 你想爬的公众号的fakeid token = "" # 你获取的token # 构造头文件,把之前获得到的cookie放进去 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=list&type=10&isMul=1&isNew=1&lang=zh_CN", "Cookie": cookie, "X-Requested-With": "XMLHttpRequest" } # 构造参数,把fakeid和token放进去 params = { "token": token, "lang": "zh_CN", "f": "json", "ajax": "1", "action": "list_ex", "begin": "0", # 如果想遍历,就以5为频数是调这个值 "count": "5", "query": "", "fakeid": fakeid, # 想查询的公众号 "type": "9", } # 调用 content_json = requests.
HTML学习总结 概述 HTML的全称为Hyper Text Markup language, 汉语翻译为超文本标记语言。它就是通过标记标签来描述网页。生动一点的理解就是,HTML是给网页画好一个骨架,告诉浏览器怎么展示这个网页。
基本概念 标签(element)是HTML操作的基本单位,形式一般为尖括号,可以理解为HTML就是通过这些标签告诉浏览器如何操作的。标签一般是成对出现的,但是也有例外,比如<br> 这种无内容的标签。 属性(attribute)是标签的一个功能,这个主要是为了更好的展示标签所要呈现的内容,可以理解为是标签的“化妆品” 类(class)属性值直接引用css的封装。 通用骨架 <!doctype html> <!-- 这是一个HTML文档 --> <html> <head> <title>test</title> </head> <body> <p>这是一个简单的网页</p> </body> </html> <!doctype html> 是表示这个是一个html文件 <html></html> 这里是文本描述网页,可以理解为这是html编写有效区域 <head></head> 这里主要是标记网页相关信息,比如<title> 展示在浏览器的tab上面。 <body></body> 表示在浏览器展示时的区域,写在这里的东西都会直接展示在浏览器。 <p></p> 表示普通文本信息。 常见元素 header 在header中,主要是标记网页信息,所以这里主要是告诉大家网站的基本信息。
<title></title>这个是展示在浏览器标签显示的,如果收藏到浏览器也是展示这段文字,同时搜索引擎也会收录这个,所以这里面的描述一定要准确。 <style></style> 定义网页展示风格,这部分涉及到 css <link rel="" href=""> 这个主要是引入额外的文件使用。比如引入css文件,<lilnk rel="stylesheet" href="mystyle.css"> <meta> 用于标记网页的字符编码、网页描述、关键字、文档作者等等。这个标签主要是给浏览器使用(比如布局)、搜索引擎(收入关键词)以及其它网页服务。比如:<meta charset="GBK"><meta name="description" content="Just for test"><meta name="keywords" content="HTML, CSS, JavaScript"><meta name="author" content="NC"><meta name="viewport" content="width=device-width, initial-scale=1.0"> 最后的viewport决定用户可视范围,device-width是根据设备展示宽度,initial-scale表示浏览器初次展示initial zoom level。 <script></script> 定义JavaScript元素 <base href="" target="_blank"> 给出网页的基本涉及的URL或者是目标 body 文本 <h1></h1>.
Pandas数据处理 Series对象 Series对象是一个带索引构成的一维数组,可以用一个数组创建Series对象:
import pandas as pd In [2]: pd.Series([1,2,3,4,5,6]) Out[2]: 0 1 1 2 2 3 3 4 4 5 5 6 dtype: int64 In [5]: data.index Out[5]: RangeIndex(start=0, stop=6, step=1) In [7]: data.values Out[7]: array([1, 2, 3, 4, 5, 6]) Series对象是一种显式定义的索引与数值关联,可以不再仅仅是整数,还可以是任意想要的类型。你可以把Series看成一种特殊的python字典。
DataFrame 创建DataFrame对象 通过单个Series对象创建 In [15]: pd.DataFrame(pd.Series([1,2,3]), columns=['test']) Out[15]: test 0 1 1 2 2 3 通过字典列表创建 In [11]: pd.DataFrame([{'a':1, 'b':2}]) Out[11]: a b 0 1 2 通过Series对象字典创建 In [16]: pd.
Ipython帮助文档 在ipython里面,有时需要去查询一个python对象,这个时候可以利用一些快捷符号来获得。
用符号?来查来文档 每一个python对象都有一个字符串的引用,即docstring,大多数情况下,这个部分会简要介绍和使用方法。Python内置一个help() 函数可以获取这些信息,并打印输出结果。
help(len) ------------------------------------------------- Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container. 在ipython中,可以直接在对象后面加一个? 来获取:
len? ------------------------------------------------- Signature: len(obj, /) Docstring: Return the number of items in a container. Type: builtin_function_or_method 用??来获取源代码 我们可以通过?? 来直接查询源代码:
In [1]: def square(a): ...: '''Return the square of a''' ...: return a ** 2 # ??来查看源码 In [2]: square?? Signature: square(a) Source: def square(a): '''Return the square of a''' return a ** 2 File: c:\users\<ipython-input-7-bc38739afe33> Type: function 如果你用?
C++智能指针 内存管理 在介绍智能指针之前,需要先提一下C++的内存管理。一般情况下,我们分配的对象内存管理有两种,一种是栈,一种是堆。这两个的区别在于,使用栈这种方式的变量在离开了作用域之后,就会被删除,但是堆不会受这个限制。所以用堆这种方式的变量(用new生成的)需要使用delete来释放。
智能指针的作用 这里就会引发一个问题,就是开发人员并不一定会总是记得去delete那些堆变量,这就导致可能占用了许多内存空间。这里就可以使用智能指针,用这种智能指针去控制管理这些堆内存,当没有使用后,自动就释放掉。
#include <memory> class Entity( public: Entity(){ std::cout<<"build entity!!!"} ; ~Entity(){ std::cout<<"destry entity!!!";} ); int main() { { std::unique_ptr<Entity> entity(new Entity()) ; //or std::make_unique<Entity> } } 比如上面那个式子,就会出现Entity()在离开作用域之后会被自动释放。
这里介绍几个常用的智能指针:
unique_ptr<typename T>; // 只能创建一个,无法复制,优先推荐 shared_ptr<typename T>; // 可以复制多个,每复制一个会多一个引用计数,当为以后释放内存 weak_ptr<typename T>; // 可以复制,但是复制后引用数不会增加,当shared_ptr引用数为0自动释放。
重新购买了云服务器,之前在腾讯云是用的gost框架写博客,但是感觉太笨重了,所以换了Hugo来建博客。整体下来还是挺简单的,所以记录下来给大家分享下。
首长你需要配置好环境
配置环境 GIT 安装 # 安装git yum install git # 配置git git config --global user.name "your_user_name" git config --global user.email "your_mail" # 查看配置是否生效 git config --list # 生成本地ssh key添加到github ssh-keygen -t rsa -C "your_mail" # 查看公钥 cat /root/.ssh/id_rsa.pub # 进入github的settings设置,添加公钥即可 配置Go环境 # 下载go wget - https://go.dev/dl/go1.17.5.linux-amd64.tar.gz tar -xzvf go1.17.5.linux-amd64.tar.gz mv go /usr/local/bin/go # 环境变量 vim ~/.bash_profile export PATH=$PATH:/usr/local/bin/go/bin source ~/.bash_profile # 验证安装 go version # go version go1.17.5 linux/amd64 安装Hugo 配置好环境就可以直接安装Hugo了,然后特别推荐第二种,不然第一种会莫名卡住。