gpt4 book ai didi

python - 运行多个 Scrapy 蜘蛛(最简单的方法)Python

转载 作者:太空狗 更新时间:2023-10-29 18:06:36 25 4
gpt4 key购买 nike

Scrapy 非常酷,但是我发现文档非常简单,一些简单的问题很难回答。在将来自各种 stackoverflow 的各种技术组合在一起之后,我终于想出了一种简单且不过于技术性的方式来运行多个 scrapy 蜘蛛。我想它的技术性不如尝试实现 scrapyd 等:

所以这里有一个爬虫可以很好地完成它的一项工作,即在表单请求之后抓取一些数据:

from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy.http import FormRequest
from swim.items import SwimItem

class MySpider(BaseSpider):
name = "swimspider"
start_urls = ["swimming website"]

def parse(self, response):
return [FormRequest.from_response(response,formname="AForm",
formdata={"lowage": "20, "highage": "25"}
,callback=self.parse1,dont_click=True)]

def parse1(self, response):
#open_in_browser(response)
hxs = Selector(response)
rows = hxs.xpath(".//tr")
items = []

for rows in rows[4:54]:
item = SwimItem()
item["names"] = rows.xpath(".//td[2]/text()").extract()
item["age"] = rows.xpath(".//td[3]/text()").extract()
item["swimtime"] = rows.xpath(".//td[4]/text()").extract()
item["team"] = rows.xpath(".//td[6]/text()").extract()
items.append(item)
return items

而不是故意用我想要的表单输入写出表单数据,即“20”和“25:

formdata={"lowage": "20", "highage": "25}

我用的是“ self ”。 + 一个变量名:

formdata={"lowage": self.lowage, "highage": self.highage}

然后,您可以使用所需的参数从命令行调用爬虫(见下文)。使用 python subprocess call() 函数可以轻松地一个接一个地调用这些命令行。这意味着我可以转到我的命令行,输入“python scrapymanager.py”并让我所有的蜘蛛做他们的事情,每个蜘蛛都在他们的命令行传递不同的参数,并将他们的数据下载到正确的地方:

#scrapymanager

from random import randint
from time import sleep
from subprocess import call

#free
call(["scrapy crawl swimspider -a lowage='20' -a highage='25' -a sex='W' -a StrkDist='10025' -o free.json -t json"], shell=True)
sleep(randint(15,45))

#breast
call(["scrapy crawl swimspider -a lowage='20' -a highage='25' -a sex='W' -a StrkDist='30025' -o breast.json -t json"], shell=True)
sleep(randint(15,45))

#back
call(["scrapy crawl swimspider -a lowage='20' -a highage='25' -a sex='W' -a StrkDist='20025' -o back.json -t json"], shell=True)
sleep(randint(15,45))

#fly
call(["scrapy crawl swimspider -a lowage='20' -a highage='25' -a sex='W' -a StrkDist='40025' -o fly.json -t json"], shell=True)
sleep(randint(15,45))

因此,与其花费数小时尝试装配一个复杂的单个蜘蛛连续爬行每个形式(在我的例子中是不同的游泳姿势),这是一种非常轻松的方式来“同时”运行许多蜘蛛(我做到了在使用 sleep() 函数的每个 scrapy 调用之间包含一个延迟。

希望这对某人有帮助。

最佳答案

这是最简单的方法。你需要将此代码保存在与 scrapy.cfg 相同的目录中(我的 scrapy 版本是 1.3.3):

from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess

setting = get_project_settings()
process = CrawlerProcess(setting)

for spider_name in process.spiders.list():
print ("Running spider %s" % (spider_name))
process.crawl(spider_name,query="dvh") #query dvh is custom argument used in your scrapy

process.start()

然后运行它。就是这样!

关于python - 运行多个 Scrapy 蜘蛛(最简单的方法)Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com