私は最初のWebクローラで作業しています。メキシコで電話番号のデータを取得しようとしています。データを提供するWebサイトはsiteです。 xhr要求で。私はこれまでのところ、このコードを持っている :Webクローラ - PythonがPOSTにデータを返さないように要求します
from requests import Request, Session
import xml.etree.ElementTree as ET
import requests
import lxml.etree as etree
url = 'https://sns.ift.org.mx:8081/sns-frontend/consulta-numeracion/numeracion-geografica.xhtml'
s = Session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
'Content-Type': 'text/html; charset=UTF-8',
}
str1 = s.post(url, headers=headers) #Loading the page
xhtml=str1.text.encode('utf-8')
#Savig the first response, to get the ViewState
text_file = open("loaded.txt", "w")
text_file.write(xhtml)
text_file.close()
x = ET.fromstring(xhtml)
namespace = "{http://www.w3.org/1999/xhtml}"
path = './/*[@id="javax.faces.ViewState"]'
e = x.findall(path.format(namespace))
for i in e:
VS = i.attrib['value'] #ViewState
print VS #ViewState
私はページのViewStateのを取得し、この時点では、今私は、データと、私が相談したい番号プラスにViewStateを持つ新しいPOSTを送信します。
data = {
"javax.faces.partial.ajax": "true",
"javax.faces.source": "FORM_myform:BTN_publicSearch",
"javax.faces.partial.execute": "@all",
"javax.faces.partial.render": "FORM_myform:P_containerConsulta+FORM_myform:P_containerpoblaciones+FORM_myform:P_containernumeracion+FORM_myform:P_containerinfo+FORM_myform:P_containerLocal+FORM_myform:P_containerDesplegable",
"FORM_myform:BTN_publicSearch": "FORM_myform:BTN_publicSearch",
"FORM_myform": "FORM_myform",
"FORM_myform:TXT_NationalNumber": "6564384757",
"javax.faces.ViewState=": VS #ViewState
}
req = s.post(url, data=data, headers=headers)
#Saving the new response, this is supposed to bring the results
text_file = open("Output.txt", "w")
text_file.write(req.text.encode('utf-8'))
text_file.close()
事は私が得る応答は情報のないページの完全なコードである、と私はそれが新しいのViewStateが付属していることに気づいた、私はデータを相談されていない理由です信じているということです。 また、サーバーにグラフィックインターフェイスがないため、セレンを使用したくないので、毎日多くの番号を調べる必要があります。
... UPDATE ... この問題は、JSFに依存しており、データとJSF値の処理方法を知る必要があると考えています。
のようなものを試してみてくださいあなたが提供することができれば、それは良くなります結果を出すことができる検索入力がありますか? – SIM
@Shahinすみません。 "Numero Nacional"というテキストボックスに数字 "6564384757"を入れて、必要な情報を最初のテーブルの一番下に置きます。 "Proveedor de telefonia que atiende el numero"。この場合、値は「AXTEL」です。 –
@ Neto Aでは、数字を右のボックスに入れても、検索ボタンはグレー表示されます。だから、私はそれを利用することはできません。リンクを参照してくださいhttps://www.dropbox.com/s/y9zfzpsdao9kup5/Untitled.jpg?dl=0 – SIM