2017-11-21 24 views
0

첫 번째 웹 크롤러에서 작업 중이며 멕시코에서 전화 번호 데이터를 얻으 려하고 있으며 데이터를 제공하는 웹 사이트는 site입니다. xhr 요청. 는 지금까지이 코드가 있습니다웹 크롤러 - Python이 데이터를 반환하지 않음을 요청합니다.

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에 새 게시물을 보낼 수 있습니다.

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를 함께 제공 것으로 나타났습니다, 나는 데이터 컨설팅되지 않는 이유는 믿습니다. 또한 서버에 그래픽 인터페이스가 없기 때문에 셀레늄을 사용하고 싶지 않으며 매일 많은 숫자를 문의해야합니다.

... 업데이트 ... 이 문제는 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'변수가과 같이 얻을 수 있다는

r = requests.get(url) 

그런 다음 그 후 나는 결과를 인쇄 할 것이다 ...이 있어야합니다. ..

print (r) 

을 그리고, I는 루프를 사용하여 배열처럼 출력되는 텍스트를 취급 할 (R [0]) 및 전화 번호와 같이 보일 수 아무것도 모든 텍스트를 확인한다. 이것은 웹 크롤러로하려는 작업을 수행 할 수있는 방법 중 하나 일 뿐이며 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

글쎄 사이트가 제공하는 전화 번호 정보도 있습니다. 그리고 그럴 경우에도 그들이 사이트에 올린 정보가 아닐 수도 있습니다. 따라서 웹 크롤러와 함께 사용하지 못할 수도 있습니다. – Jdw136

+0

나는 휴대폰 목록을 가지고 있으며, 각자의 이동 통신사를 알아야합니다. 예를 들어 핸드폰 번호를 입력하면 이동 통신사는 AT & T입니다. 다른 회사들도 마찬가지입니다. –

0

당신은 컬과 시도해야한다 ... 이런 식으로

그물 @
#!/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

나와 같은 문제 ... 반환하는 페이지에는 데이터가 제공되지 않습니다. –