使用一个python脚本抓取大量网站【2/3】

news/2024/11/17 23:32:37/

一、说明

        我如何使用一个 Python 脚本抓取大量网站,在第 2 部分使用 Docker ,“我如何使用一个python脚本抓取大量网站”统计数据。在本文中,我将与您分享:

  • Github存储库,您可以从中克隆它;
  • 链接到 docker 容器,可以帮助您使用一个命令抓取内容;
  • 一些用例以及如何处理它们;

您可以从我关于实用网页抓取的其他博客文章中以易于查看的格式找到代码。

二、Repo 和Updates

        进行版本控制对于对重构过程进行适当的控制是必要的。这也是一种比 Gist 脚本更方便的共享代码库的方式。参考地址:

GitHub - destilabs/webtric

通过在 GitHub 上创建一个帐户来为目标/网站开发做出贡献。

github.com

        默认情况下,此存储库允许您解析著名的抓取sandbox(沙盒) quotes.toscrape.com。为了更好地理解脚本以及如何根据自己的目的修改它,请阅读第 1 部分。

        您可以通过 shell 脚本执行立即在本地开始使用它:

./scripts/quotes.sh ./outputs/quotes local 

./scripts/quotes.sh ./outputs/quotes remote 

        我鼓励您阅读此脚本的列表并附上注释,以更好地了解它的作用:参考地址:

网站/语录.sh在主·Destilabs/webtric

此文件包含双向 Unicode 文本,其解释或编译方式可能与下面显示的内容不同...

github.com

三、Docker登场

        虽然这个解决方案似乎对许多读者很有帮助,但我可以想象它在安装过程中并非无痛。Chromedriver 是一个令人讨厌的工具,需要定期更新和对操作系统配置细微差别的“初学者+”理解。另一方面,Docker 只需要知道运行容器的正确命令。

描述这个容器可能没有比只显示它的 docker-compose 文件更好的方法了:参考地址:

webtric/docker-compose.yml at main ·Destilabs/webtric

此时无法执行此操作。您使用其他选项卡或窗口登录。您在另一个选项卡中注销或...

github.com

        让我们也一步一步地看一遍:

        Chromedriver 和 Selenium Hub 是独立的服务。它们将在其相应的端口上启动并运行。在剧本中等待他们起床至关重要。

        Webtric服务(帖子的主人公)将在飞行中构建,然后等待上面的两个服务。您会在日志中看到一些错误,但它应该赶上并开始解析。

Webtric 的预期输出

要运行 docker-compose 文件,请执行两个命令:

export APP=./scripts/quotes.sh
docker-compose up 

        Jupyter 服务将被提升为可以立即访问解析的数据。输入 http://localhost:8888/lab?token=webtric 并创建新笔记本:

Pick Python 3 (ipykernel)

这是一个简洁的脚本,用于访问“/home/webtric”卷中最后一个抓取的文件:

import pandas as pd
from os import listdir
from os.path import isfile, joinVOLUME = "/home/webtric"
files = [f for f in listdir(VOLUME) if isfile(join(VOLUME, f))]print('List of all parsed files')
print('\n'.join(files))df = pd.read_csv(join(VOLUME, files[-1]))
df.head()

这是它最终应该的样子

表明你成功了!

四、使用案例

        首先,我做这个项目只是为了好玩和学习,你也可以。从实际的角度来看,在 docker 中使用 Webtric 对于扩展很有用,因为现在可以通过生成越来越多的容器来并行抓取。不过,请记住刮擦的黄金法则:

对要解析的网站保持温和

        现在托管您的蜘蛛也更容易,因为大多数现代云托管服务提供商对容器都很友好。我将准备一个关于如何在不久的将来使其工作的教程,敬请期待。


http://www.ppmy.cn/news/1018042.html

相关文章

下载网络文件到本地

文章目录 目录 前言 操作步骤 1.引入 2.读取出文件内容 3.筛选出URL 4.下载表情包 总结 前言 这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。 一、操作步骤 1.引入 首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在…

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署: 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …

CCF-A类时序知识图谱(temporal knowledge graph)2022、2023论文整理

History Repeats: Overcoming Catastrophic Forgetting For Event-Centric Temporal Knowledge Graph Completion 本文是关于如何用一种通用的持续框架来解决TKG补全的问题。时间知识图谱是一种动态的知识图谱,它包含了随着时间变化的事实。TKG补全的目的是预测缺失…

【java】【高级拓展1】常见算法正则表达式异常

目录 1 算法 1.1 简单认识算法 1.2 常见算法 - 排序算法 1.2.1 冒泡排序 1.2.2 选择排序 1.3 常见算法-查找算法 1.3.1 基本查询(顺序查找)不好(性能不好) 1.3.2 二分查找(折半查找) 2 正则表达式 …

MySQL使用C/C++访问

目录 前言 1.引入第三方库 2.MySQL接口介绍 总结 前言 哈喽,各位小伙伴,大家好!今天我们要讲的是关于如何使用C/C语言访问数据库,实现对数据库内容的增删查改。 1.引入第三方库 访问数据库,MySQL提供了对应的第三方…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C:1、malloc 2、calloc C:new运算符 一 malloc malloc(): 这个函数用于分配一块指定大小的内存块,并返回一个指向该内存块的指针。语法如下: void* malloc(size_t size); 示例: int* ptr …

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)D题题解

文章目录 [Count Bracket Sequences](https://atcoder.jp/contests/abc312/tasks/abc312_d)问题建模问题分析1.分析合法括号字符串的特点2.从集合角度分析字符串每个字符的作用代码 Count Bracket Sequences 问题建模 给定一个字符串,字符串内仅有3种字符&#xff…

湘大oj1138爱你一生一世题解:最大公约数 逆向思维 int整除会向下取整

一、链接 爱你一生一世 二、题目 题目描述 在2013年1月4日,这个“爱你一生一世”的特别日子,男生都想向自己的喜欢的女生表达爱意。 你准备在该死的C语言考试后,去向她(或者他?)告白。告白怎么能缺了礼…