ayugesheng 最近的时间轴更新
ayugesheng

ayugesheng

V2EX 第 490075 号会员,加入于 2020-05-18 10:45:11 +08:00
ayugesheng 最近回复了
347 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@Maerd #11 很高兴对你有帮助,使用过 scrapy 的话会很容易上手的。字体反爬只是浅尝,虽说原理就只是找出字体间的真实映射关系,但很复杂(字体反爬有多种实现形式和变种),很难通用。所以主要用来扩展 scrapy 。
359 天前
回复了 kekeones 创建的主题 Python Scrapy 异步问题求助
不好意思,v2ex 是不支持 markdown 吗,不怎么在论坛发东西。
359 天前
回复了 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"

以上代码乱了,无语,重发一次。
359 天前
回复了 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"
360 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 好的,有时间体验下。
360 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 大部分都是多台机器的场景,一般都需要有方便地切换部署的服务器,或者指定分配星期 1,3,5 在某个服务器运行某个项目等功能。crawlab 比较符合需求,xxl-crawler 也用过,我个人感觉还是 crawlab 比较好。k8s 还没有用过,但应该没有比 crawlab 这种直接 ui 点击操作或者官方 api 执行来上传项目来的方便。
360 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@Maerd scrapyd 及其只依赖 scrapyd 开发的工具只能管理 scrapy 项目。还是会有一些其它非 scrapy 项目。
362 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 部署机器不多的话,直接 crontab 还是很香的,docker 也用过。但是具有多服务器部署和调度方便还具有警告等功能的话,crawlab 我觉得使用着挺不错的。
363 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
如果发现项目中有实现不太好的地方或者有建议的话,可以提 ISSUE 中的 Question 来反馈,我空闲时会查看的。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1258 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 00:00 · PVG 08:00 · LAX 16:00 · JFK 19:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.