2017-11-21 8 views
0

私は最初の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値の処理方法を知る必要があると考えています。

+0

のようなものを試してみてくださいあなたが提供することができれば、それは良くなります結果を出すことができる検索入力がありますか? – SIM

+0

@Shahinすみません。 "Numero Nacional"というテキストボックスに数字 "6564384757"を入れて、必要な情報を最初のテーブルの一番下に置きます。 "Proveedor de telefonia que atiende el numero"。この場合、値は「AXTEL」です。 –

+0

@ Neto Aでは、数字を右のボックスに入れても、検索ボタンはグレー表示されます。だから、私はそれを利用することはできません。リンクを参照してくださいhttps://www.dropbox.com/s/y9zfzpsdao9kup5/Untitled.jpg?dl=0 – SIM

答えて

0

ウェブサイトのオフデータを取得するための要求を使用するためには、あなたがこれを持っている必要があります...

r = requests.get(url) 

はその後、その後、私は「R」変数がそうのようになるという結果を印刷します。 ..

print (r) 

そして私は、forループを使用して、配列(R [0])のように出力されたテキストを処理し、電話番号のように見えるかもしれません何のためのすべてのテキストを確認します。 これは、Webクローラで何をしようとしているかを行う方法の1つに過ぎず、xmlをまったく使用しません。

だから、すべてで、私のコードは次のようになります...

import requests 

url = "myurl" 
r = requests.get(url) 
counter = 0 
length = len(r) 
while counter != length: 
    if r[counter] == '1' or r[counter] == '2' or r[counter] == '3' or r[counter] == '4' or r[counter] == '5'or r[counter] == '6' or r[counter] == '7' or r[counter] == '8' or r[counter] == '9' or r[counter] == '0': 
     data = r[counter:counter+12] 
     print (data) 
    counter += 1 
+0

私は番号を入力すると仮定し、ページは私のような番号の情報を与える:キャリア、都市、等だから私はPOSTを使って番号を送信し、実際にXMLを受け取ったので、ページがロードされているのを見ることができます: –

+0

そのサイトが提供している電話番号に関する情報もあります。そして、それがあっても、彼らは単に自分のサイトに入れている情報ではないかもしれません。だから、あなたはWebクローラーでそれを使うことさえできないかもしれません。 – Jdw136

+0

私は電話のリストを持っています。私はそこに自分の携帯電話番号を入れた場合、そのキャリア会社はAT&Tだと言います。他の企業でも同じです。 –

0

あなたは、カールとネットA @

#!/bin/bash 

CURL='/usr/bin/curl --connect-timeout 5 --max-time 50' 
URL='https://sns.ift.org.mx:8081/sns-frontend/consulta-numeracion/numeracion-geografica.xhtml' 
CURLARGS='-sD - -j' 
NUM='6564193195' 
c_FRONTAPPID="$($CURL $CURLARGS $URL)" 
arr=($c_FRONTAPPID) 

i=0 
for var in "${arr[@]}" 
do 
    if [[ $var == *"FRONTAPPID="* ]]; then 
     FRONTAPPID=$(echo "$var" | sed 's/.*FRONTAPPID=\(.*\);.*/\1/' | sed 's/!/"'"'"'!'"'"'"/g') 
     #echo $var 
     #echo $FRONTAPPID  
    fi 
    if [[ $var == *"id=\"javax.faces.ViewState\""* ]]; then 
     VIEWSTATE=$(echo ${arr[i+1]} | sed 's/.*"\(.*\)".*/\1/') 
     #echo ${arr[i+1]} 
     #echo $VIEWSTATE 
    fi 
    ((i++)) 
done 

($CURL 'https://sns.ift.org.mx:8081/sns-frontend/consulta-numeracion/numeracion-geografica.xhtml' -X POST -H 'Host: sns.ift.org.mx:8081' -H 'Accept: application/xml, text/xml, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0' --compressed -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Faces-Request: partial/ajax' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://sns.ift.org.mx:8081/sns-frontend/consulta-numeracion/numeracion-geografica.xhtml' -H "Cookie: FRONTAPPID=$FRONTAPPID" -H 'Connection: keep-alive' --data "javax.faces.partial.ajax=true&javax.faces.source=FORM_myform:BTN_publicSearch&[email protected]&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=$NUM&javax.faces.ViewState=$VIEWSTATE") 
+0

私と同じ問題... 返されるページにはデータはありません。 –

関連する問題