2016-06-20 22 views
0

私はウェブページ(http://www.phillyhistory.org/historicstreets/)を検索しようとしています。関連ソースhtmlはこれだと思います。検索バーに値を入力し、Webページから出力をダウンロードする

<input name="txtStreetName" type="text" id="txtStreetName"> 

残りのソースhtmlは、Webサイトで見ることができます。そのテキストボックスに入り、通りの名前を入力して出力をダウンロードしたいと思います(つまり、ページの検索ボックスに「Jefferson」と入力し、Jeffersonで歴史的な通りの名前を表示します)。私はrequests.postを使って試してみましたが、入力しようとしましたか?get = JeffersonがURLにテストします。誰でもこのページを取得する方法はありますか?

import requests 
from bs4 import BeautifulSoup 
import csv 
from string import ascii_lowercase 
import codecs 
import os.path 
import time 


arrayofstreets = [] 



arrayofstreets = ['Jefferson'] 

for each in arrayofstreets: 
    url = 'http://www.phillyhistory.org/historicstreets/default.aspx' 
    payload = {'txtStreetName': each} 
    r = requests.post(url, data=payload).content 
    outfile = "raw/" + each + ".html" 
    with open(outfile, "w") as code: 
     code.write(r) 
    time.sleep(2) 

これは仕事と私だけ(つまり、ダウンロードしたデフォルトのWebページを与えませんでした:私は現在、(私はなどを解析することを計画していくつかの輸入品が使用されていない)しようとしたおかげで、

キャメロン

コードジェファーソン検索バーに入力し、検索されない。

答えて

1

私は「requests.post」にあなたの参照を推測しているのpythonの要求モジュールに関するものである。

あなたが指定していないとして、あなたは、検索結果からこすりたいものを私は単にあなたに与えられた検索クエリのHTMLを取得するためのスニペットを提供します:

import requests 

query = 'Jefferson' 

url = 'http://www.phillyhistory.org/historicstreets/default.aspx' 
post_data = {'txtStreetName': query} 

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

print html_result 

をあなたはさらにいくつかを抽出するために、htmlファイルを処理する必要がある場合データの場合は、Beautiful Soupモジュールを使用することをお勧めします。

更新されたバージョン:私/あなたの最初のバージョンで

#!/usr/bin/python 
import requests 
from bs4 import BeautifulSoup 
import csv 
from string import ascii_lowercase 
import codecs 
import os.path 
import time 

def get_post_data(html_soup, query): 
    view_state = html_soup.find('input', {'name': '__VIEWSTATE'})['value'] 
    event_validation = html_soup.find('input', {'name': '__EVENTVALIDATION'})['value'] 
    textbox1 = '' 
    btn_search = 'Find' 
    return {'__VIEWSTATE': view_state, 
      '__EVENTVALIDATION': event_validation, 
      'Textbox1': '', 
      'txtStreetName': query, 
      'btnSearch': btn_search 
      } 

arrayofstreets = ['Jefferson'] 


url = 'http://www.phillyhistory.org/historicstreets/default.aspx' 
html = requests.get(url).content 
for each in arrayofstreets: 
     payload = get_post_data(BeautifulSoup(html, 'lxml'), each) 
     r = requests.post(url, data=payload).content 
     outfile = "raw/" + each + ".html" 
     with open(outfile, "w") as code: 
      code.write(r) 
      time.sleep(2) 

問題は、我々はすべての必要なパラメータを投稿していなかったということでした。送信する必要があるものを見つけるには、ブラウザでネットワークモニタを開き(FirefoxではCtrl + Shitf + Q)、通常どおりに検索します。ネットワークログでPOSTリクエストを選択した場合は、右側に「パラメータ」タブが表示され、ブラウザが送信したポストパラメータが表示されます。

enter image description here

+0

こんにちはDziugas、これはまさに私が試みたものです。私は正しい出力を得られなかった。上記の私の回答を編集しました – www3

関連する問題