暴力网络爬虫,如何使用 Link Extractor 来提高自动化程度。废料

brute force web crawler, how to use Link Extractor towards increased automation. Scrapy

我正在使用一个 scrapy 网络爬虫来提取一堆数据,正如我所描述的 here,我已经找到了一种蛮力方法来获取我想要的信息,但是..它真的很粗糙。我只是列举了所有我想抓取的页面,有几百个。我需要完成这件事,所以我可能会咬紧牙关像个白痴一样忍受它,但如果能把它自动化就好了。如何使用 scrapy link 提取来实现此过程?我查看了文档并按照我在上面的问题 link 中描述的那样做了一些实验,但还没有任何效果。这是暴力破解代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from brute_force.items import BruteForceItem

class DmozSpider(BaseSpider):
    name = "brutus"
    allowed_domains = ["tool.httpcn.com"]
    start_urls = ["http://tool.httpcn.com/Html/Zi/21/PWAZAZAZXVILEPWXV.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQCQILEPWB.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQKOILEPWD.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQUYILEPWF.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQMEILEKOCQ.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQRNILEKOKO.shtml",
              "http://tool.httpcn.com/Html/Zi/22/PWCQKOILUYUYKOTBCQ.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZAZRNILEPWRN.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQPWILEPWC.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQILILEPWE.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQTBILEKOAZ.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZCQXVILEKOPW.shtml",
              "http://tool.httpcn.com/Html/Zi/21/PWAZAZPWAZILEKOIL.shtml",
              "http://tool.httpcn.com/Html/Zi/22/PWCQKOILRNUYKOTBUY.shtml"]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        items = []
        item =  BruteForceItem()

        item["the_strokes"] = hxs.xpath('//*[@id="div_a1"]/div[2]').extract()
        item["character"] = hxs.xpath('//*[@id="div_a1"]/div[3]').extract()
        items.append(item)
        return items

我想这就是你想要的:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from brute_force.items import BruteForceItem
from urlparse import urljoin

class DmozSpider(BaseSpider):
    name = "brutus"
    allowed_domains = ["tool.httpcn.com"]
    start_urls = ['http://tool.httpcn.com/Zi/BuShou.html']

    def parse(self, response):
        for url in response.css('td a::attr(href)').extract():
            cb = self.parse if '/zi/bushou' in url.lower() else self.parse_item
            yield Request(urljoin(response.url, url), callback=cb)

    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item =  BruteForceItem()
        item["the_strokes"] = hxs.xpath('//*[@id="div_a1"]/div[2]').extract()
        item["character"] = hxs.xpath('//*[@id="div_a1"]/div[3]').extract()
        return item

试试这个

1。 蜘蛛从 start_urls.

开始

2。 self.parse。我只是在 td 标签中找到所有 a 标签。 如果 url 包含“/zi/bushou”,那么响应应该再次转到 self.parse,因为它是您调用的 'second layer'。 如果不是像 url 这样的 '/zi/bushou'(我认为在这里使用更具体的正则表达式更好)。我认为这是你想要的,然后转到 parse_item 函数。

3。 self.parse_项。这是您用来从最后一页获取信息的函数。