[解決済み] 動的ページのためのscrapyとselenium
2023-02-03 23:07:28
質問
私はscrapyを使用して、ウェブページから製品情報をスクレイピングしようとしています。私のスクレイピングされるウェブページは次のようになります。
- 10製品でproduct_listページで始まる
- next" ボタンをクリックすると、次の 10 個の製品がロードされます (url は 2 つのページ間で変更されません)。
- 私は LinkExtractor を使用して、各製品のリンクを製品ページに追跡し、必要なすべての情報を取得します。
next-button-ajax-callを再現しようとしましたが、うまくいかないので、seleniumを試しています。seleniumのwebdriverは別のスクリプトで実行できるのですが、scrapyとどのように統合すればいいのかわかりません。私のscrapyスパイダーのどこにselenium部分を置くべきですか?
私のスパイダーは以下のようなかなり標準的なものです。
class ProductSpider(CrawlSpider):
name = "product_spider"
allowed_domains = ['example.com']
start_urls = ['http://example.com/shanghai']
rules = [
Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
]
def parse_product(self, response):
self.log("parsing product %s" %response.url, level=INFO)
hxs = HtmlXPathSelector(response)
# actual data follows
どんなアイデアでも歓迎します。ありがとうございます。
どのように解決するのですか?
どのようにサイトをスクレイピングする必要があるか、どのように、どのようなデータを取得したいかによります。
以下は、ebayのページングをどのように追跡するかの例です。
Scrapy
+
Selenium
:
import scrapy
from selenium import webdriver
class ProductSpider(scrapy.Spider):
name = "product_spider"
allowed_domains = ['ebay.com']
start_urls = ['http://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40']
def __init__(self):
self.driver = webdriver.Firefox()
def parse(self, response):
self.driver.get(response.url)
while True:
next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a')
try:
next.click()
# get the data and write it to scrapy items
except:
break
self.driver.close()
以下は、"selenium spiders"の例です。
- pythonでscrapyを使ってJavascriptの送信フォームの関数を実行する
- https://gist.github.com/cheekybastard/4944914
- https://gist.github.com/irfani/1045108
- http://snipplr.com/view/66998/
また
Selenium
と
Scrapy
. 場合によっては
ScrapyJS
ミドルウェア
であれば、ページの動的な部分を処理するのに十分です。実際の使い方のサンプルです。
関連
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法