1

lxml と cssselect を使用して、選択ドロップダウン ボックスからデータを取得/スクレイピングしたいと考えています。

私はいくつかのことを試してみましたが、これまでに運がなくてもウェブを検索しました:

したがって、次のコードまたは類似のコードは、私がスクレイピングしているページにあります。

<select id="attribute501" class="required-entry super-attribute-select" name="super_attribute[501]">
<option value="">Choose an Option...</option>
<option value="33">5</option>
<option value="31">10</option>
</select>

次の cssselect ステートメントを使用します。

css_sel_price_dd = 'html body.catalog-product-view div.wrapper div.page div.main-container div.main div.col-main div.product-view div.product-essential form div.product-shop select'


pack_size_obj = root.cssselect(css_sel_price_dd)
print 'This strain has a drop down select box for different pack sizes: '
print pack_size_obj
pack_size = pack_size_obj[0].text_content().encode('utf-8').strip()
print 'Pack Size: ' + pack_size

次の結果が得られます。

This strain has a drop down select box for different pack sizes: 
[<SelectElement 10e77d590 name='super_attribute[501]'>]
Pack Size: Choose an Option...

しかし、これまでのところ、他のオプションからのテキスト値、つまり 5 と 10 にアクセスできません

<option value="33">5</option>
<option value="31">10</option>
  • オプションをcssパスやさまざまなものに追加しようとしましたが、構文を推測できないようで、オンラインで何も見つかりません...

まだ機能していません - URL などを含む実際のコード スニペットを次に示します。

import lxml.html
import requests
import csv


user_agent = {'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17'}
# Open a session 
s = requests.session()

s.get('http://www.seedsman.com/en/cannabis-seeds', headers = user_agent)

css_sel_price_dd = '.product-shop select option'

open_seed_url = 'http://www.seedsman.com/en/amsterdam-mist-feminised-seeds'
print 'From the following URL: ' + open_seed_url

r = s.get(open_seed_url, headers = user_agent)
r_encoding = r.encoding
print 'encoding type of r:'
print r_encoding

myhtml = r.text # gives us a unicode string work with unicode and encode at the end when have piece of data we want

print myhtml.encode('utf-8')

root = lxml.html.fromstring(myhtml)

pack_size_obj = root.cssselect(css_sel_price_dd)
print pack_size_obj
for opt in pack_size_obj:
    print '{0} : {1}'.format(opt.get('value'), opt.text)

うまくいけば、誰かが何が間違っているのかを見ることができますか?

戻り値:

From the following URL: http://www.seedsman.com/en/amsterdam-mist-feminised-seeds
encoding type of r: UTF-8
** HTML removed for brevity ** 
[<Element option at 0x1108dcbf0>] 
None : Choose an Option... 
[Finished in 3.9s]
4

2 に答える 2

3

セレクターに追加する必要がありoption、オプション要素のリストを取得します。このサンプル スニペットを見てください。html だけが少し簡略化されています。

src_html = """
<html>
    <head></head>
    <body>
        <div>
            <select id="attribute501" class="required-entry super-attribute-select" name="super_attribute[501]">
                <option value="">Choose an Option...</option>
                <option value="33">5</option>
                <option value="31">10</option>
            </select>
        </div>
    </body>
</html>
"""
root = html.fromstring(src_html)

css_sel_price_dd = 'html body div select option'
pack_size_obj = root.cssselect(css_sel_price_dd)
for opt in pack_size_obj:
    print '{0} : {1}'.format(opt.get('value'), opt.text)
于 2013-04-30T11:47:18.297 に答える
0

あなたが使用することができますxpath

options = root.xpath("//select[@id='attribute501']/option")
option_text = [option.text for option in options]

また

options = root.xpath("//select[@id='attribute501']/option/text()")
于 2015-01-14T05:11:58.447 に答える