用于将完整网页和网站克隆到本地存储的python包。

pywebcop的Python项目详细描述


pywebcopy©6

创建人:raja tomar 许可证:MIT 电子邮件:rajatomar788@gmail.com

轻松克隆python网站和网页。 使用python抓取或保存完整的网页和网站。

用python编写的web抓取和归档工具 存档任何在线网站及其资产、css、js和 用于office读取、存储或其他原因的图像。 使用pywebcopy

为什么很棒?因为它-

  • 尊重robots.txt
  • 使用css、js和图像一次调用即可保存网页
  • 克隆一个完整的网站,其中的资产和链接在一次调用中重新映射
  • 使用直接的api实现简单易用
  • 高级使用的子类化
  • 自定义HTML标记处理程序支持
  • 许多配置可满足许多定制需求
  • 在一个对象中提供多个刮削包,用于在一个类下刮削
    • lxml
    • 请求
    • 美化组4
    • pyquery
    • 请求HTML

如有任何疑问,请发电子邮件至rajatomar788@gmail.com

1.1安装

pywebcopy在pypi上可用,并且可以使用pip轻松安装

$ pip install pywebcopy

你准备好了。阅读下面的教程开始学习。

1.1.1第一步

您应该始终检查是否成功安装了最新的pywebcopy。

>>>importpywebcopy>>>pywebcopy.__version___6.0.0

您的版本可能不同,现在您可以继续本教程。

1.2基本用法

要保存任何单个页面,只需在python控制台中键入

frompywebcopyimportsave_webpagekwargs={'project_name':'some-fancy-name'}save_webpage(url='http://example-site.com/index.html',project_folder='path/to/downloads',**kwargs)

要保存完整的网站(这可能会使目标服务器过载,因此,请小心)

frompywebcopyimportsave_websitekwargs={'project_name':'some-fancy-name'}save_website(url='http://example-site.com/index.html',project_folder='path/to/downloads',**kwargs)

1.3运行测试

运行测试很简单,不需要任何外部库。 只需从pywebcopy包的根目录运行此命令。

$ python -m pywebcopy run-tests

1.4命令行界面

pywebcopy有一个非常易于使用的命令行界面 可以帮助你完成任务而不必担心内心 很长一段路。

  • 获取命令列表
    $ python -m pywebcopy -- --help
    

  • 使用API
    $ python -m pywebcopy save_webpage http://google.com E://store// --bypass_robots=True
    or
    $ python -m pywebcopy save_website http://google.com E://store// --bypass_robots
    

  • 运行测试
    $ python -m pywebcopy run_tests
    

1.5认证和cookies

大多数情况下,访问某个页面需要身份验证。 使用pywebcopy进行身份验证非常容易,因为它使用 requests.session可访问的基本http活动的对象 通过pywebcopy.session属性。如你所知 有很多关于使用requests.session设置身份验证的教程

下面是简单http auth的一个基本示例-

importpywebcopy# Update the headers with suitable datapywebcopy.SESSION.headers.update({'auth':{'username':'password'},'form':{'key1':'value1'},})# Rest of the code is as usualkwargs={'url':'http://localhost:5000','project_folder':'e://saved_pages//','project_name':'my_site'}pywebcopy.config.setup_config(**kwargs)pywebcopy.save_webpage(**kwargs)

2.1网页

网页类,此保存操作的引擎。 你可以使用这个类访问更多的方法 使用自定义流程。

  • 创建实例

    您可以直接从pywebcopy包导入此类。

    $ pip install pywebcopy
    
    0
  • 从Internet获取HTML源代码

    你可以告诉它从 然后,它使用requests模块获取 给你。

    您可以传入几个参数 它将接受 例如,代理、身份验证等。

    $ pip install pywebcopy
    
    1
  • 提供自己打开的文件 您还可以提供开放源代码句柄 直接

    $ pip install pywebcopy
    
    2

2.1.2网页属性和方法

创建后将公开网页对象的api 通过上述任何方法

  • 文件路径属性 只读此文件结束的位置 当您试图保存解析的HTML源代码时

    要更改此位置,必须操纵 .utx类的属性。你可以 请在下面查找。

  • <代码>>.project_path属性 只读所有文件结束的位置 当您试图保存整个网页时。

    要更改此位置,必须操纵 .utx类的属性。你可以 请在下面查找。

  • 。保存资产方法 此方法保存所有的csscssjsimagesfonts等。 在您通过property设置的文件夹中。project\u path

    $ pip install pywebcopy
    
    3
  • 。保存HTML方法 在设置网页实例后,您可以 使用此方法保存已分析的 并在.file路径的属性值处修改html。

    $ pip install pywebcopy
    
    4
  • 。保存完成方法 这是您将要使用的重要api 经常用于保存或克隆网页供以后使用 阅读或任何用例。

    此方法保存所有的csscssjsimagesfonts等。 按与大多数浏览器相同的顺序单击 右击菜单中的保存页选项。

    如果你想用css,js和图片来完成网页

    $ pip install pywebcopy
    
    5

3.1刮片支架

在一个对象中包装了多个刮削包 你可以用它来解锁所有这些库中最好的 一次不必经历 实例化每个库

< Buff行情>

使用下面记录的所有方法和属性 只需按说明创建一次对象即可

$ pip install pywebcopy
6 < Buff行情>

所有代码都遵循上述代码

  • 支持美化组方法

$ pip install pywebcopy
7
  • 完全支持lxml

    可以对其使用任何lxml方法。有关lxml的更多信息,请访问http://lxml.de/

    $ pip install pywebcopy
    
    8
  • 完全支持pyquery

    您可以对其使用pyquery方法。有关pyquery的详细信息,请访问https://pythonhosted.org/pyquery/

    $ pip install pywebcopy
    
    9
  • lxml.xpath也受支持

    xpath本身也受支持,它返回一个:class:requests\u html.element 详见https://html.python requests.org

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    0

  • 仅选择包含特定文本的元素

    通过requests\u html模块提供。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    1

爬虫程序对象

这是网页类的子类,可用于镜像任何网站。

>>>importpywebcopy>>>pywebcopy.__version___6.0.0
2

常见设置和错误

你很容易犯初学的错误,或者会搞糊涂, 下面是常见的错误,如果你 面对他们。

  1. pywebcopy.exceptions.accesserror

    如果您得到的是pywebcopy.exceptions.accesserrorexception。 然后检查网站是否允许删除其内容。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    3
  2. 复制时覆盖现有文件

    如果要覆盖目录中的现有文件,则 使用over-write配置键。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    4
  3. 更改项目名称

    默认情况下,pywebcopy在project_文件夹中创建一个目录 使用您提供的url,但您可以使用以下代码更改它 低于

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    5
  4. < > >

    如何保存单个网页

    使用以下方法可以轻松保存特定网页。

    注意:如果您在运行这些代码时得到pywebcopy.exceptions.accesserror,请使用后面部分提供的代码。

    方法1:通过API-save_webpage()

    使用名为的内置功能可以轻松保存网页。save_webpage()需要几个 参数也是。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    6

    方法2

    这个用例稍微强大一些,因为它可以提供网页类的唯一性。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    7

    方法2使用纯html

    我之前告诉过你,网页对象功能强大,可以以任何方式操作。

    一个特点是原始的html现在也被接受了。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    8

    如何克隆整个网站

    复制网站时要小心,因为这可能会使 站点的服务器很少可能是非法的,所以请检查之前的所有内容 继续。

    方法1:通过API-save_website()

    使用内置的api.save_website()这需要几个参数。

    >>>importpywebcopy>>>pywebcopy.__version___6.0.0
    9

    方法2-

    创建一个crawler()对象,该对象还提供其他几个函数。

    frompywebcopyimportsave_webpagekwargs={'project_name':'some-fancy-name'}save_webpage(url='http://example-site.com/index.html',project_folder='path/to/downloads',**kwargs)
    0

    1.3配置

    pywebcopy是高度可配置的。可以设置全局对象 使用pywebcopy.config对象公开的方法。

    更改全局配置的方法如下-

    • 使用方法在globalpywebcopy.config对象上设置配置

      您可以使用 。设置配置调用。

      frompywebcopyimportsave_webpagekwargs={'project_name':'some-fancy-name'}save_webpage(url='http://example-site.com/index.html',project_folder='path/to/downloads',**kwargs)
      1 完成了!

    • 将配置变量直接传递到

      全局API,例如。保存网页

      要更改任何配置,只需将其传递到api调用即可。

      示例:

      frompywebcopyimportsave_webpagekwargs={'project_name':'some-fancy-name'}save_webpage(url='http://example-site.com/index.html',project_folder='path/to/downloads',**kwargs)
      2

      可用配置列表

      下面是配置键及其默认值的列表:

      frompywebcopyimportsave_webpagekwargs={'project_name':'some-fancy-name'}save_webpage(url='http://example-site.com/index.html',project_folder='path/to/downloads',**kwargs)
      3

    4.1贡献

    您可以在许多方面做出贡献

    • 在github repo上给它一颗星星
    • 在github repo上报告错误:https://github.com/rajatomar788/pywebcopy/或在我的电子邮件中。
    • 在github repo上创建请求:https://github.com/rajatomar788/pywebcopy/" rel="nofollow">https://github.com/rajatomar788/pywebcopy/
    • 发送感谢邮件

    如果您有任何建议、修复或报告,请随时给我发邮件:)

    5.1未记录的功能

    我在这个项目中构建了许多实用程序和类来简化 我正试图完成的任务。

    <但是, 这些任务也适用于一般用途。

    如果需要,您可以帮助为这些未记录的文档生成合适的文档, 然后您可以随时创建并请求或发送电子邮件给我。

    6.1变更日志

    [版本6.0.0]

    • 中断更改使用python fire库创建新的命令行界面。
    • config.setup路径中实现类型检查和路径规范化
    • 添加了新的动态pywebcopy.\u所有attr generation.
    • 网页类现在不接受任何参数(中断更改)
    • 网页类有新方法网页.获取网页.设置源
    • 下载队列替换为管理活动线程的屏障

    [版本5.x]

    • 优化现有代码,在某些情况下可提高5倍的速度
    • 消除了混乱,提高了可读性

    [版本4.x]

    • 核心功能的完整重写和重组。

    [版本2.0.0]

    [已更改]

    • core.setup配置函数更改为config.setup配置

    [已添加]

    • 添加了utils.tracedecorator,当debug config key为true时,它将打印函数名参数kwargs和返回值。
    • 新的HTML解析器('html5lib','lxml')支持更好的网页。
    • HTML解析器现在默认为"lxml"。您可以使用任何通过newconfig.config键调用parser

    [固定]

    • 修正了更改用户代理密钥破解网页时出现的问题。您现在可以使用任何浏览器的用户代理ID,它将得到完全相同的页面下载。
    • 修正了由python3中的strbytes差异引起的generators.extract\css\uURL问题。
    • 修复了模块导入中的问题。(谢谢你)。
    • 错误处理添加到所需函数

    [版本2.0(beta)]

    • init函数替换为保存网页
    • 增加了三个新的自动化功能-
      • core.setup\u config(仅从url和下载位置创建每个理想配置)
      • 配置重置配置(将配置重置为默认状态)
      • config.update配置(手动模式版本的core.setup配置
    • 对象结构.网页已添加
    • 合并的生成器。生成"U样式"映射生成器。生成"U相对"路径到单个函数生成器。生成"U样式"映射
    • 重写大多数函数
    • 新增模块异常已添加

    [版本1.10]

    • url在启动任何工作功能之前,会检查并解析任何重定向。
    • initvars:mirrors\u dirclean\u up已修复,在日志完全写入之前清除了dir。
    • initcall现在默认采用urlarg,如果不提供,则可能引发错误
    • 专业的日志条目
    • 重写的存档系统现在使用zipfile异常处理来防止错误和最终的存档损坏

    [版本1.9]

    • 更多冗余代码
    • 模块现在根据类型分开,例如磁芯、发电机、实用程序等。
    • 新的助手函数和类结构.webpage
    • 与Python2.6、2.7、3.6、3.7兼容

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何强制用户在允许访问活动之前处理对话框?我的许可证代码怎么了?   java ArraysList作为JSON   mysql如何在java中创建包含多个可选where子句的搜索语句?   java如何让Apache Camel在“直接”路径的末尾删除文件?   使用socket在两个Androids之间进行java实时数据传输。IO(websocket)和4G   如何在java中实现两个CORBA服务器之间的通信   会话树xml表示为java对象   java Skype4Java编号swtwin323325   java RecyclerView getAdapterPosition()不工作:第一次单击返回正确位置,第二次单击返回1   java在$TOMCAT/conf/context上为JNDI设置资源。xml   java为什么第二个矩形冲突在第一个矩形冲突时不起作用?   JScrollPane上的java JTextArea未出现在JPanel上   java如何将实现的PriorityQueue打印为字符串?   jpa使用Jersey更新用户角色RESTJava(JAXRS)