基于bs4库的HTML格式输出和编码
1. 基于bs4库的HTML格式输出如何能让HTML内容更加友好的显示呢?
这里面的友好,不只是使HTML内容更容易使人阅读,也使程序能更好地读取和分析。
在bs4库中,提出了一个方法prettify(),我们在代码中演示。12345678910>>> import requests>>> from bs4 import BeautifulSoup>>> url = "https://www.crummy.com/software/BeautifulSoup/">>> r = requests.get(url)>>> r.status_code200>>> r.encoding'UTF-8'>>> r.text'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"\n"http://www.w3.org/TR ...
基于bs4库的HTML内容遍历方法
1. HTML基本格式如果我们把HTML代码做一个结构化的设计,可以发现HTML代码是一个具有树形结构的文本信息。
事实上任何一个HTML或XML文件都是这样标签树形结构,这样的树形结构形成了三种遍历方法。
下行遍历:从根节点开始向叶结点遍历。
上行遍历:从叶结点开始向根节点遍历。
平行遍历:在平级结点之间遍历。
注意,一个标签结点的孩子结点不仅包括标签结点,也包括字符串结点,如'\n'等。
2. 标签树的三种遍历方法
2.1. 下行遍历标签树的下行遍历一共包含三个属性,如下。
属性
说明
.contents
子节点的列表,将<tag>所有儿子结点存入列表。
.children
子节点的迭代类型,与.contents类似,用于循环遍历儿子结点。
.descendants
子孙结点的迭代类型,包含所有子孙结点,用于循环遍历。
12345678>>> soup.head.contents['\n', <meta content="text/html; charset=u ...
BeautifulSoup库入门
Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers hours or days of work.
1. BeautifulSoup库的安装终端安装方法方法:pip install beautifulsoup4。我这里其实还是用了Anaconda软件,来帮助我管理各种Python包。
下面我们对BeautifulSoup库的安装做一个简单的小测。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 ...
Requests库爬取实例
1. 京东商品页面的爬取找到一个京东商品页面,我这里选的是Apple 2019新品 MacBook Pro 16【带触控栏】九代八核i9 16G 1TB 深空灰 Radeon Pro 5500M显卡 ,链接是https://item.jd.com/100010079900.html。链接可能会失效,不过其他商品页面链接完全同理。
本例仅直接使用最后的完整代码,我们应该在此之前,先对我们爬取的页面做一些前置工作。
前置工作参照后面几个例子,一般是先在交互式页面做前置工作,确认没有问题后,再使用完整代码爬取。
12345678910111213141516import requestsdef getHTMLText(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text[:1000] # 页面中只有前面小部分是商品信息,故只取前面一小部分 except: retur ...
网络爬虫的盗亦有道
1. 网络爬虫的尺寸
序号
规模
数据量
爬取速度
第三方库
目的
1
小
小
不敏感
Request库
爬取网页 玩转网页
2
中
中
敏感
Scrapy库
爬取网站 爬取系列网站
3
大
大
非常关键
定制开发
爬取全网 构建搜索引擎
我们平时见到的网络爬虫,小规模的网页爬虫占到了90%以上的比例。
不要看这样的爬虫很小,但是它针对特定网页或一系列的网页,能发挥很大的作用。
2. 网络爬虫引发的问题
骚扰问题:受限于编写水平和目的,网络爬虫将会为web服务器带来巨大的资源开销。
法律风险:服务器上的数据有产权归属,网络爬虫获取数据后牟利将带来法律风险。
泄露隐私:网络爬虫可能具备突破简单访问控制的能力,获得被保护数据从而泄露个人隐私。
3. 网络爬虫的限制
来源审查:判断User-Agent进行限制。
检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。
发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守。
发布公告仅仅是公告的形式,至于网络爬虫是否遵守,由其自身决定。
通过上面两个方法,互联网 ...
Requests库入门
Requests is an elegant and simple HTTP library for Python, built for human beings.
关于Requests库更多信息,点击这里查看Requests库官网。
1. Requsets库的7个主要方法
方法
说明
requests.request()
构造一个请求,支撑以下各方法的基础方法。
requests.get()
获取HTML网页的主要方法,对应于HTTP的GET。
requests.head()
获取HTML网页头信息的方法,对应于HTTP的HEAD。
requests.post()
向HTML网页提交POST请求的方法,对应于HTTP的POST。
requests.put()
向HTML网页提交PUT请求的方法,对应于HTTP的PUT。
requests.patch()
向HTML网页提交局部修改请求,对应于HTTP的PATCH。
requests.delete()
向HTML页面提交删除请求,对应于HTTP的DELETE。
Requests库中其实只有 ...
'LeetCode: 172. 阶乘后的零'
原题链接(英文):https://leetcode.com/problems/factorial-trailing-zeroes/description/原题链接(中文):https://leetcode-cn.com/problems/factorial-trailing-zeroes/description/
如果将一个正整数因式分解,那么其末尾的 $0$ 必然可以分解为 $2\times 5$。也就是说,因子中每一对 $2$ 和 $5$ 就对应着末尾的一个 $0$,因为 $2$ 肯定比 $5$ 多。综上,所以我们只要统计因子中有多少个 $5$ 就是结果了。根据算术基本定理中性质(5):$n!$ 的素因子分解中的素数 $p$ 的幂为 $[\frac{n}{p}]+[\frac{n}{p^2}]+[\frac{n}{p^3}]+\cdots$我们把 $p=5$ 代入,计算出结果即为所求。
12345678910111213int trailingZeroes(int n){ int count_zeros = 0; long long p = 5; ...
'LeetCode: 98. 验证二叉搜索树'
原题链接(英文):https://leetcode.com/problems/validate-binary-search-tree/原题链接(中文):https://leetcode-cn.com/problems/validate-binary-search-tree/
这个题主要有两种解法:一、利用二叉搜索树的性质:中序遍历序列严格单调递增。二、递归法逐一判断每个结点(子树)是否满足二叉搜索树的特征。方法一:
我们只需要对此二叉树进行一次中序遍历,查看其中序遍历序列是否是严格单调递增的即可。
我们并不需要将这个树的中序遍历序列记录下来,也可能不需要遍历完整棵树。当我们遍历到某结点时,只需要比较一下看看这个结点的值是否大于上一个遍历的结点的值。因此我们只需要记录上一个遍历的结点的值 $inorder\_last\_val$,并每当遍历过一个结点后,更新该值。如果遍历到某个结点时,发现当前结点的值比 $inorder\_last\_val$ 小,说明这不是一个二叉搜索树,直接中断遍历并返回 $false$;如果遍历完整棵树都没有出现这种情况,那么这就是一个二叉搜索树,返回 $true ...
SSR 科学上网方法
1. 购买 VPSVPS 选择谁家的都可以,例如搬瓦工和 Vultr,我使用的是 Vultr 的。系统建议选择 Debian,因为本文后面要使用的脚本在 Debian 上支持一键配置谷歌 BBR 加速。本篇文章重点在于配置 SSR,就不在购买 VPS 这里多码字了。
注意,并不是所有的 IP 地址都可行的,我们在开始配置 SSR 之前,要确保我们 VPS 的 22 号端口为开放状态。如果 22 号端口是关闭的,那么我们就要摧毁并重建 VPS,直到获得一个 22 号端口为开放的 IP 地址。你可以用命令行的方式来判断某个端口是否打开,也可以使用一些网站工具来帮助你。这里分享几个可以进行端口扫描的网站:1. https://www.yougetsignal.com/tools/open-ports/2. http://coolaf.com/tool/port3. http://tool.chinaz.com/update.html
2. 下载并执行脚本2.1. 使用SSH连接VPSMacOS 使用终端,输入 ssh root@xxx.xxx.xxx.xxx,后面是你的 IP 地址,再输入 ...
HDU-3555 Bomb (数位DP)
描述传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3555
给你一个数 N,问在从 1 ~ N 的数中有多少个数包含 “49”,其中 4 和 9 必须是连续的。例如 1 ~ 500中,有 49, 149, 249, 349, 449, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499 一共 15 个数包含 “49”,所以答案是 15。
思路题目范围已经到了 long long 的边界了,暴力肯定不可行。然后这个题看起来就是数位DP的简单题 😂。只要在dfs()函数中记录下上一个数是不是 4 就可以了,然后将算好的值存在 dp 数组中,记忆化搜索,这样便可以算出有多少个数不包含 “49”,再做一下减法就是答案了。唯一要注意的也就是这个题的范围了。
代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <iostream>#include < ...