ayugesheng 最近的时间轴更新
ayugesheng

ayugesheng

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

以上代码乱了,无语,重发一次。
122 天前
回复了 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"
123 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 好的,有时间体验下。
123 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 大部分都是多台机器的场景,一般都需要有方便地切换部署的服务器,或者指定分配星期 1,3,5 在某个服务器运行某个项目等功能。crawlab 比较符合需求,xxl-crawler 也用过,我个人感觉还是 crawlab 比较好。k8s 还没有用过,但应该没有比 crawlab 这种直接 ui 点击操作或者官方 api 执行来上传项目来的方便。
123 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@Maerd scrapyd 及其只依赖 scrapyd 开发的工具只能管理 scrapy 项目。还是会有一些其它非 scrapy 项目。
125 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
@xinmans 部署机器不多的话,直接 crontab 还是很香的,docker 也用过。但是具有多服务器部署和调度方便还具有警告等功能的话,crawlab 我觉得使用着挺不错的。
126 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
如果发现项目中有实现不太好的地方或者有建议的话,可以提 ISSUE 中的 Question 来反馈,我空闲时会查看的。
127 天前
回复了 ayugesheng 创建的主题 Python 推荐下我的 scrapy 扩展工具
像一些项目可能会有上百个的 spider 脚本,大家都是如何管理的呢,在同一个项目还好说,但大部分场景是在不同的项目板块中的。

我见过直接就一整个项目,然后分别创建 middlewares ,items ,pipelines ,settings 和 spiders 的文件夹,然后每一个 spider 在这些文件夹中都会有对应的模块,最后 spider 脚本在不同的文件夹下导入对应的模块使用,惊到我了。虽然目的是达到了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   935 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 22:42 · PVG 06:42 · LAX 15:42 · JFK 18:42
Developed with CodeLauncher
♥ Do have faith in what you're doing.