2016-11-28 17 views
0

私は、認証が必要ないくつかのウェブサイトをリッピングするためにscrapyを使いたいと思っています。 私はこれをformdataを使って読むことができますが、現在直面している問題は、入力ページが更新されるたびに入力名がランダムに生成されるということです。ここでダイナミックコンテンツフォームを使った治療

はhtmlコードです:

<input type="text" name="MemberNameb326ccc51594e4" id="MemberNameb326ccc51594e4" size="15" maxlength="20" value="" tabindex="1"> 

私はこれに対処するにはどうすればよいですか?

答えて

0

あなたはそれがダイナミックなので、あなたはそれが要素を囲んだ取得することによって、その入力の参照を取得することができます入力された名前を使用することはできません、例えば

<div id="static-id"><input type="text" name="MemberNameb326ccc51594e4" id="MemberNameb326ccc51594e4" size="15" maxlength="20" value="" tabindex="1"></div> 

あなたがその周囲のコンテナを持っていたら、あなたが得ることができますその入力

+0

を含む任意の入力フィールドを与えることによって、あなたのニーズに合わせれるので、私はFORMDATA内response.xpathを使用することが可能かもしれないと仮定します。私は構文の例を見つけることができないようです。 – MDP

+0

https://doc.scrapy.org/en/latest/topics/request-response.html#using-formrequest-from-response-to-simulate-a-user-loginフォームをスクラップして現在の入力名を知り、フォームデータを動的に構築する –

0

の名前多分pythonのBeautifulsoup4モジュールを使用するより良いかもしれない、とhtmlのスープが完了したら、あなたはこのように、対応するIDを見つけることreモジュールを使用することがあります。

#!/usr/bin/env python 
# -*- coding: UTF-8 -*- 
import requests 
import re 
from bs4 import BeautifulSoup 
#get the url page content 
html = request.get("http://mysite.url/toscrap").content 
#soup the html content 
soup = BeautifulSoup(html) 
#find all inputs containing "MemberName" in id field 
my_inputs = soup.findAll("input",{"id":re.compile("MemberName")}) 

あなたのidは「メンバー名

よろしく