V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ayugesheng  ›  全部回复第 1 页 / 共 1 页
回复总数  12
355 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@Maerd #11 很高兴对你有帮助,使用过 scrapy 的话会很容易上手的。字体反爬只是浅尝,虽说原理就只是找出字体间的真实映射关系,但很复杂(字体反爬有多种实现形式和变种),很难通用。所以主要用来扩展 scrapy 。
2023-12-27 18:00:06 +08:00
回复了 kekeones 创建的主题 Python Scrapy 异步问题求助
不好意思,v2ex 是不支持 markdown 吗,不怎么在论坛发东西。
2023-12-27 17:58:27 +08:00
回复了 kekeones 创建的主题 Python Scrapy 异步问题求助
@kekeones 推荐直接 aiomysql + aiohttp ,给出一个 aiohttp 的 pipeline 示例:

```
import asyncio

import aiohttp
from scrapy.utils.defer import deferred_from_coro


class DemoPipeline:
def __init__(self) -> None:
# 一些参数初始化
pass

def open_spider(self, spider):
# 这里可以写入一些非 async 的预备操作,把比如默认参数设置和日志配置等
return deferred_from_coro(self._open_spider(spider))

async def _open_spider(self, spider):
# 这里一般是连接池,async 连接等预备操作
await asyncio.sleep(0.1)

async def process_item(self, item, spider):
# 这里可以使用一些 async 存储库来实现存储逻辑
...
# 看你想 post 到 data 还是 form
# post_data = json.dumps('{"content": "test"}')
post_data = {"content": "test"}
async with aiohttp.ClientSession() as session:
async with session.post(
"http://httpbin.org/post", data=post_data
) as additional_response:
# 获取响应内容
additional_data = await additional_response.text()
print("additional_data:", additional_data)
return item

async def _close_spider(self):
# 这里一般是 async 连接或连接池关闭逻辑
await asyncio.sleep(0.1)

def close_spider(self, spider):
return deferred_from_coro(self._close_spider())
```

注意:
使用以上代码时,需要在 settings.py 中或者 custom_settings 中配置 "TWISTED_REACTOR": "twisted.internet.asyncioreactor.AsyncioSelectorReactor"

以上代码乱了,无语,重发一次。
2023-12-27 17:56:19 +08:00
回复了 kekeones 创建的主题 Python Scrapy 异步问题求助
@kekeones 既然都 async 了,推荐直接 aiomysql + aiohttp ,给出一个 aiohttp 的 pipeline 示例:

import asyncio

import aiohttp
from scrapy.utils.defer import deferred_from_coro


class DemoPipeline:
def __init__(self) -> None:
# 一些参数初始化
pass

def open_spider(self, spider):
# 这里可以写入一些非 async 的预备操作,把比如默认参数设置和日志配置等
return deferred_from_coro(self._open_spider(spider))

async def _open_spider(self, spider):
# 这里一般是连接池,async 连接等预备操作
await asyncio.sleep(0.1)

async def process_item(self, item, spider):
# 这里可以使用一些 async 存储库来实现存储逻辑
...
# 看你想 post 到 data 还是 form
# post_data = json.dumps('{"content": "test"}')
post_data = {"content": "test"}
async with aiohttp.ClientSession() as session:
async with session.post(
"http://httpbin.org/post", data=post_data
) as additional_response:
# 获取响应内容
additional_data = await additional_response.text()
print("additional_data:", additional_data)
return item

async def _close_spider(self):
# 这里一般是 async 连接或连接池关闭逻辑
await asyncio.sleep(0.1)

def close_spider(self, spider):
return deferred_from_coro(self._close_spider())

注意:
使用以上代码时,需要在 settings.py 中或者 custom_settings 中配置 "TWISTED_REACTOR": "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
2023-12-26 19:29:20 +08:00
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 好的,有时间体验下。
2023-12-26 17:20:53 +08:00
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 大部分都是多台机器的场景,一般都需要有方便地切换部署的服务器,或者指定分配星期 1,3,5 在某个服务器运行某个项目等功能。crawlab 比较符合需求,xxl-crawler 也用过,我个人感觉还是 crawlab 比较好。k8s 还没有用过,但应该没有比 crawlab 这种直接 ui 点击操作或者官方 api 执行来上传项目来的方便。
2023-12-26 17:03:30 +08:00
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@Maerd scrapyd 及其只依赖 scrapyd 开发的工具只能管理 scrapy 项目。还是会有一些其它非 scrapy 项目。
2023-12-24 23:25:43 +08:00
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 部署机器不多的话,直接 crontab 还是很香的,docker 也用过。但是具有多服务器部署和调度方便还具有警告等功能的话,crawlab 我觉得使用着挺不错的。
2023-12-23 12:48:33 +08:00
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
如果发现项目中有实现不太好的地方或者有建议的话,可以提 ISSUE 中的 Question 来反馈,我空闲时会查看的。
2023-12-22 17:19:55 +08:00
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
像一些项目可能会有上百个的 spider 脚本,大家都是如何管理的呢,在同一个项目还好说,但大部分场景是在不同的项目板块中的。

我见过直接就一整个项目,然后分别创建 middlewares ,items ,pipelines ,settings 和 spiders 的文件夹,然后每一个 spider 在这些文件夹中都会有对应的模块,最后 spider 脚本在不同的文件夹下导入对应的模块使用,惊到我了。虽然目的是达到了。
2023-12-21 17:55:55 +08:00
回复了 xinmans 创建的主题 Visual Studio Code vscode 开发 Python 程序有哪些最佳实践
@CaptainD 部分同意,远程开发 pycharm 确实不如 vscode ;但是一些开发工具比如 isort ,flake8 ,black 等 pycharm 都可以通过配置 external tools 和 file watcher 来方便地添加和使用; autoDocstring 也自带的有,可通过 Docstring 自定义配置。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2031 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
Developed with CodeLauncher
♥ Do have faith in what you're doing.