厌倦了书签页面? 报废...
我为大量教程加了书签 ,但是再也没有打开它们。 我就是那些喜欢pdf版本或书籍而不是一堆网页作为OneTab中存储的书签或标签的人之一。
我最近从我最喜欢的网站https://www.geeksforgeeks.org/operating-systems/刷新了操作系统的概念。
尽管我喜欢学习OS,但我不喜欢按主题依次打开Web链接。 我希望将页面的所有内容作为一个文件供我细读。 之后,我尝试使“从网站提取文本”(也称为网络抓取)过程自动化。 网页抓取的用例是无限的。 就像检查机票价格,监视股票价格,比较产品价格,甚至为您的下一个分析项目收集数据一样,还有什么比使用Python更好的方法呢?
从上图可以看到,该网页包含许多主题和相关的嵌入式链接。 我的要求是提取这些链接,然后进一步解析以从中获取数据。
要点:
- 在系统中安装Python。
我的PC上安装了Anaconda (Python发行版),该软件自动安装Python。 它还负责环境变量的配置。
2.安装BeautifulSoup4,这是一个Python库,用于从HTML和XML文件中提取数据。
从https://anaconda.org/anaconda/beautifulsoup4下载该库。 运行conda install beautifulsoap4-4.6.7-py37_0.tar.bz2
。 根据您下载的软件包的名称进行修改。
实现方式:
- 我们首先需要下载网页才能对其进行抓取。 为此,我们使用了请求模块。 导入脚本中所需的所有模块。
from bs4 import BeautifulSoup
import requests
import os
2.在page_link变量中指定要提取的网页。 请求模块将GET请求发送到Web服务器以提取我们的网页
page_link =' https://www.geeksforgeeks.org/operating-systems/'
page_response = requests.get(page_link, timeout=7)
3.现在,我们终于可以使用BeautifulSoup库来解析以上响应。
page_content = BeautifulSoup(page_response.content, "html.parser")
4.检查网页,找到您需要提取的内容的类名称(也可以使用ID名称或标签名称)。 为此,右键单击您的元素,然后选择“检查”。
5.我找到了所需的类名。 现在,使用find方法从上面步骤中创建的嵌套数据结构中特别提取这些类。
最好使用try-except块,因为可以捕获错误,以使它们不会停止程序的后续执行。
6.由于需要这些类中嵌入的链接,因此我编写了一个函数来单独获取链接并将其保存在output_links.txt中 。 ' a '标签包含我寻求的href属性。 使用find_all搜索' a '标签,并使用get获取href 。
7.此步骤是为提取的所有类调用上面定义的函数。
看一下output_links.txt文件,其中包含我们提取的所有链接
8.现在,我们实际上需要从每个链接中获取内容并将它们存储在文件中。 提取内容的代码是,
同样,它取决于您正在解析的HTML页面的结构。 在我从中进行抓取的页面中,所有内容都存在于article标签内。 当在get_links_topic()函数本身中提取链接时,我将调用此函数。
为了提高可读性,我还使用分解功能删除了一些不必要的内容。 另外,我在输出中删除了广告行和不必要的新行。 现在,最终输出存储在OS_Tutorials.txt中
完整的代码是:
OS_Tutorials.txt(现在的大小约为159KB)如下所示:
在继续解析您喜欢的Web内容之前,请注意以下几点:
- 避免将提取的信息用于商业目的。 我不会代替提取的文件。
- 通过主动提取来破坏您喜欢的网站并不是很酷。
3.并且网站的布局可能会随着时间而改变。 您可能需要相应地修改代码。
参考文献:
https://beautiful-soup-4.readthedocs.io/en/latest/
https://hackernoon.com/web-scraping-bf2d814cc572
注意:
请评论此方法是否有替代方法,以及是否可以进行任何代码优化。 如果使用此方法提取了任何网站,也请评论:)
From: https://hackernoon.com/tired-of-bookmarking-pages-scrap-it-instead-b398622f77d