2012-07-02 4 views
1

나는 거미줄을 사용하여 출력 페이지를 구문 분석하여 일부 입력 태그 매개 변수 (유형, ID, 이름)를 선택하려고하고 각 데이터 유형이 항목으로 선택됩니다 이 데이터베이스에 그런 나중에 뭔가를 저장할 수 있도록 :정확한 값을 입력 태그에서 추출 .. 이미지 제공

Database Table_1 
╔════════════════╗ 
║  text  ║ 
╠════════════════╣ 
║ id │ name ║ 
╟──────┼─────────╢ 
║  │   ║ 
╟──────┼─────────╢ 
║  │   ║ 
╚══════╧═════════╝ 

은 같은, 암호 및 파일 만에

난 그 XPath는 전체 태그를 추출한다 직면 문제가 될 것입니다!

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item, Field 
from isa.items import IsaItem 


class MySpider(CrawlSpider): 
    name = 'example.com' 
    allowed_domains = ['testaspnet.vulnweb.com'] 
    start_urls = ['http://testaspnet.vulnweb.com'] 


    rules = (
      Rule(SgmlLinkExtractor(allow=('/*')),callback='parse_item'),) 

    def parse_item(self, response): 
     self.log('%s' % response.url) 

     hxs = HtmlXPathSelector(response) 
     item=IsaItem() 
     text_input=hxs.select("//input[(@id or @name) and (@type = 'text')]").extract() 
     pass_input=hxs.select("//input[(@id or @name) and (@type = 'password')]").extract()  
     file_input=hxs.select("//input[(@id or @name) and (@type = 'file')]").extract() 

     print text_input , pass_input ,file_input 
     return item 

출력 내가 바로 당신을 이해 한 경우

[email protected]:~/isa/isa$ scrapy crawl example.com -L INFO -o file_nfffame.csv -t csv 
2012-07-02 12:42:02+0200 [scrapy] INFO: Scrapy 0.14.4 started (bot: isa) 
2012-07-02 12:42:02+0200 [example.com] INFO: Spider opened 
2012-07-02 12:42:02+0200 [example.com] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
[] [] [] 
[] [] [] 
[] [] [] 
[u'<input name="tbUsername" type="text" id="tbUsername" class="Login">'] [u'<input name="tbPassword" type="password" id="tbPassword" class="Login">'] [] 
[] [] [] 
[u'<input name="tbUsername" type="text" id="tbUsername" class="Login">'] [u'<input name="tbPassword" type="password" id="tbPassword" class="Login">'] [] 

[] [] [] 
2012-07-02 12:42:08+0200 [example.com] INFO: Closing spider (finished) 
+0

올바른 출력은 어떻게 표시되어야합니까? –

+0

@stav 형식의 텍스트 >> [ID, 이름], 정확히 [ "tbUsername", "tbUsername"], [ "tbPassword", "tbPassword"] 유형의 경우 ID가 중복 된 것으로 알고 있습니다. 값이 있지만이 양식은 id = name –

답변

0

, 당신은 입력에서 속성 값을 추출 할.

현재 사용중인 XPath는 사용자가 요구하는 바에 따라 전체 노드를 제공합니다. XPath 선택기는 노드의 한 지점까지 올라가지 만 그 노드의 특정 속성에는 넘어 가지 않습니다.

some/xpath/query/@id 
+0

이므로 내 xpath에 솔루션을 친절하게 적용 할 수 있습니까? –

+0

방금 ​​당신에게 원칙을 보여주고있었습니다. 속성 값을 추출하려면 현재 XPath에'/ @ attr_name'을 추가하십시오. – Utkanos

0

사용 :

//yourCurrentExpression/@id 

id 특성을 얻을 수

는 노드의 id 속성이 아닌 노드 자체를 얻으려면.

사용 :

//yourCurrentExpression/text() 

yourCurrentExpression 요소에 의해 선택된 임의의 텍스트 노드의 아이를 구하십시오. 선택된 노드에 표시됩니다 즉, (id-attribute, text-node)* :이 노드 목록을 생성

//yourCurrentExpression/@id | //yourCurrentExpression/text() 

해당 항목이 같이 정렬 :

마지막으로

, 당신은 하나 하나로 두 식을 결합 할 수 있습니다 문서 순서.

+0

$ text_input = hxs.select ("// input 및 @type = 'text')]/@ id") 추출() pass_input = hxs.select ("// input (@id 및 @name) 및 (@type = 'password')]/@ id) @] id = "id"). extract() >>이 ID는 나에게 id [u'tbUsername '] [u'tbPassword'] [] –

+0

을주었습니다. 't :( –

+0

@ right.sowrd : XPath 표현을 좀 더 일반적인 것으로 대체 할 수 있으려면 적어도 최소 XPath를 알아야합니다. 당신이 잘못 입력했다고 생각하지만, 논평.질문을 편집하여 거기에 입력하거나 새로운 질문을 할 수 있습니다. 앞에서 언급했듯이 여기에 질문하기 전에 최소 XPath를 배워 보는 것이 가장 좋습니다. 그렇지 않은 경우 대답을 이해하고 적용 할 수 없습니다.이 경우 분명히 알 수 있습니다. –

관련 문제