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}
我用了“自己”。+ 变量名:
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调用之间)。
希望这可以帮助某人。