2013-07-25 104 views
1

我正在使用硒和scrapy导航到一个数据表,我想提取链接/ href到csv文件。到目前为止,我所尝试过的所有内容似乎都不起作用,而且我不确定要尝试什么或如何获取链接。提取href scrapy - 抓取但不提取

这里是我试图从链接/ HREF表的重要组成部分:

<tr class="even"> 

<td class="paddingColumnValue"> </td> 

<td class="nameColumnValue"><a href="/m/app?service=external/sdata_details&sp=12812" class="sdata" title="Click here for additional details.">click</a></td> 

<td class="amountColumnValue">$600,000.00</td> 

<td class="myListColumnValue"><a href="" onclick="doMyListButton(this.firstChild.getAttribute('src'),this.name);myListHandler(this.name);return false;" önmouseover="return true" name="12812"><img src="/m/images/add.gif" border="0" title="Click to add this to your list" name="A12812"></a></td> 


</tr> 

我已经得到了实际得到的数据最接近的是与此代码...(注表ID = search_results)

import time 
from scrapy.item import Item, Field 
from selenium import webdriver 
from scrapy.spider import BaseSpider 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 

class ElyseAvenueItem(Item): 
    link = Field() 

class ElyseAvenueSpider(BaseSpider): 
    name = "elyse" 
    allowed_domains = ["domain.com"] 
    start_urls = [ 
'http://www.domain.com'] 

def __init__(self): 
    self.driver = webdriver.Firefox() 

def parse(self, response): 
    self.driver.get(response.url) 
    el1 = self.driver.find_element_by_xpath("//*[@id='headerRelatedLinks']/ul/li[5]/a") 
    el1.click() 
    time.sleep(2) 
    el2 = self.driver.find_element_by_xpath("/html/body/form/table/tbody/tr[2]/td[2]/table/tbody/tr/td[3]/p[3]/a[1]") 
    if el2: 
     el2.click() 
     time.sleep(2) 
    el3 = self.driver.find_element_by_xpath("/html/body/form/table/tbody/tr[2]/td[2]/table[1]/tbody/tr/td[3]/a") 
    if el3: 
     el3.click() 
     time.sleep(20) 


     titles = self.driver.find_elements_by_class_name("sdata") 
     items = [] 
     for titles in titles: 
      item = ElyseAvenueItem() 
      item ["link"] = titles.find_element_by_xpath("//*[@id='search_results']/tbody/tr[2]/td[2]/a") 
      items.append(item) 
      return item 

输出到CSV:在0x03F16E90

selenium.webdriver.remote.webelement.WebElement对象感谢你的帮助。如果这会有所帮助,我可以发布更多我的尝试和他们的输出。就像我说的,我需要的是href,我只是无法弄清楚如何去做。

回答

0

你在刮selenium webelement实例,而不是它的文本。替换:

item ["link"] = titles.find_element_by_xpath("//*[@id='search_results']/tbody/tr[2]/td[2]/a") 

link = titles.find_element_by_xpath("//*[@id='search_results']/tbody/tr[2]/td[2]/a") 
item ["link"] = link.get_attribute('href') 

希望有所帮助。

+0

谢谢你的帮助。它很接近,但是它提取了标签之间的东西...而不是标签之间的东西。我需要在href =“”中的东西。 – user2608626

+0

谢谢,奇怪的是这次没有刮东西。 – user2608626

+0

这可能听起来很奇怪,但我似乎与python有一个问题是格式化。我读过这个标签不太好用,但是使用空格键4x缩进一行。我正在使用记事本++,到目前为止,我还没有能够自己输入代码。我一直不得不复制和粘贴其他代码,然后修改它来做我所需要的。你有什么建议吗?这可能是它不起作用的原因吗? Firefox浏览器肯定是开放的,它正在经历像它要做的那样的链接。统计数据根本没有提及正在执行的任何爬行。对不起,这样的废话q。 :( – user2608626