1

セレンとスクレイピーを使用してデータのテーブルに移動していますが、リンク/href を csv ファイルに抽出したいと考えています。これまでのところ、私が試したことはすべてうまくいかないようで、何を試したらいいのか、リンクを取得する方法がわかりません。

リンク/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 であり、その方法がわかりません。

4

1 に答える 1

1

テキストではなく、セレン 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')

それが役立つことを願っています。

于 2013-07-25T21:39:52.997 に答える