2015-01-13 2 views
0

친애하는 파이썬 전문가님께! 저는 파이썬에 완전히 익숙하고 웹 페이지에서 정보를 가져 오기위한 작은 프로그램을 작성했습니다. 페이지가 Chrome에서 쉽게 볼 수있는 페이지 소스 HTML의 모든 정보를 반환하는지 묻는 것은 없습니다. 문제는 IP 주소를 https://www.maxmind.com/en/geoip-demo에 제출 한 후에 가져 오려는 요소가 HTML 본문에 표시되지 않지만 Chrome의 '요소 검사'를 클릭 할 때만 문제가된다는 것입니다. 나는 페이지에 게시하고 응답 문자열을 출력하기 위해 다음 코드를 사용했지만, 원하는 요소는 거기에 없었다. 이 코드 Python을 사용하여 HTML에 표시되지 않지만 Chrome의 '요소 검사'도구에 나타나는 요소를 가져 오는 방법은 무엇인가요?

import urllib2 
import requests 

url = 'https://www.maxmind.com/en/geoip-demo' 
data = {'addresses':'162.237.72.200'} 

post = requests.post(url, data = data) 
content = post.content 

print content 

, 나는 그런

162.237.72.200 
US 
Pittsburg,California,United States,North America  
94565 
38.0051, 
-121.8387 
AT&T U-verse  
AT&T U-verse  
sbcglobal.net 
807 

로 HTML의 본문에 IP 주소에 관한 몇 가지 정보를 얻을 수 있도록 노력하겠습니다하지만 그 정보는 HTML 본문에 없다, 그래서 나는 누군가가 저에게 문제를 해결하기위한 힌트를 줄 수 있다면 정말로 감사드립니다. 정말 고맙습니다!

+0

검사하는 동안 Firefox의 페이지에서 "submit"을 클릭하면 GET 요청이 "https : // www.maxmind.com/geoip/v2.1/city/your.ip.here"로 전송됩니다. 'geoip-demo'페이지 대신 해당 페이지를 직접 쿼리 할 수 ​​있습니다. – Kevin

+0

내부 링크를 신속하게 지적 해 주신 Kenvin에게 감사하지만, 시도 할 때 페이지는 UserName과 PassWord를 요청합니다. "geoip-demo"페이지에 직접 입력하는 동안 무료 정보를 제공하고 멤버십 계정을 요구하지 않습니다. – weefwefwqg3

답변

1

브라우저 탐색 및 양식과의 상호 작용을 시뮬레이트하는 작업 솔루션으로 scrapy 및 webdriver를 사용하여 데이터를 검색합니다. 출력으로부터

class MaxSpider(CrawlSpider): 
    name = "max" 
    allowed_domains = ["maxmind.com"] 
    start_urls = ["https://www.maxmind.com/en/geoip-demo"] 

def __init__(self): 
    self.driver = webdriver.Firefox() 

def parse(self, response): 
    self.driver.get(response.url) 
    button = self.driver.find_element_by_id('addresses') 
    login_form = self.driver.find_element_by_id('addresses') 
    actions = ActionChains(self.driver) 
    actions.click(login_form) 
    actions.perform() 
    login_form.send_keys("62.237.72.200") 
    submit = self.driver.find_element_by_xpath('//*[@id="geoip-demo-form"]/button') 
    actions.click(submit) 
    time.sleep(3) 
    for element in self.driver.find_elements_by_id('geoip-demo-results-tbody'): 
     print element.text 
    self.driver.close() 

발췌 :

2015년 1월 13일 13 : 27 : 18 + 0100 [최대] DEBUG : 크롤링 (200) https://www.maxmind.com/ 엔/GeoIP가-데모> (리퍼러 : http://www.bing.com)

62.237.72.200 FI 핀란드, 유럽 60.1708, 24.9375 텔레 덴마크 텔레 덴마크

+0

@Windy 제안 된 솔루션이 효과가 있습니까? – aberna

관련 문제