暴力网络爬虫,如何使用 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_项。这是您用来从最后一页获取信息的函数。
我正在使用一个 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_项。这是您用来从最后一页获取信息的函数。