-1

こんにちは、みんな !

私はまだTwistedを発見していて、HTMLテーブルのコンテンツをExcelに解析するためにこのスクリプトを作成しました。このスクリプトはうまく機能しています!私の質問は、1つのWebページ(http://bandscore.ielts.org/)だけで同じことを行うにはどうすればよいですか?ただし、すべての結果をフェッチし、beautifulSoupで解析してから、それらを配置できるようにするためのPOSTリクエストが多数ありますエクセルに?

ソースを解析してExcelに入れることは問題ありませんが、Twistedを使用してPOSTリクエストを実行して実装する方法がわかりません。

これは、(ツイストを使用して)多くの異なるページを解析するために使用するスクリプトです(同じスクリプトを記述できるようにしたいのですが、同じページに多くの異なるPOSTデータがあり、多くのページはありません):

from twisted.web import client
from twisted.internet import reactor, defer
from bs4 import BeautifulSoup as BeautifulSoup
import time
import xlwt

start = time.time()
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet("BULATS_IA_PARSED")
global x
x = 0
Countries_List = ['Afghanistan','Armenia','Brazil','Argentina','Armenia','Australia','Austria','Azerbaijan','Bahrain','Bangladesh','Belgium','Belize','Bolivia','Bosnia and Herzegovina','Brazil','Brunei Darussalam','Bulgaria','Cameroon','Canada','Central African Republic','Chile','China','Colombia','Costa Rica','Croatia','Cuba','Cyprus','Czech Republic','Denmark','Dominican Republic','Ecuador','Egypt','Eritrea','Estonia','Ethiopia','Faroe Islands','Fiji','Finland','France','French Polynesia','Georgia','Germany','Gibraltar','Greece','Grenada','Hong Kong','Hungary','Iceland','India','Indonesia','Iran','Iraq','Ireland','Israel','Italy','Jamaica','Japan','Jordan','Kazakhstan','Kenya','Kuwait','Latvia','Lebanon','Libya','Liechtenstein','Lithuania','Luxembourg','Macau','Macedonia','Malaysia','Maldives','Malta','Mexico','Monaco','Montenegro','Morocco','Mozambique','Myanmar (Burma)','Nepal','Netherlands','New Caledonia','New Zealand','Nigeria','Norway','Oman','Pakistan','Palestine','Papua New Guinea','Paraguay','Peru','Philippines','Poland','Portugal','Qatar','Romania','Russia','Saudi Arabia','Serbia','Singapore','Slovakia','Slovenia','South Africa','South Korea','Spain','Sri Lanka','Sweden','Switzerland','Syria','Taiwan','Thailand','Trinadad and Tobago','Tunisia','Turkey','Ukraine','United Arab Emirates','United Kingdom','United States','Uruguay','Uzbekistan','Venezuela','Vietnam']
urls = ["http://www.cambridgeesol.org/institutions/results.php?region=%s&type=&BULATS=on" % Countries for Countries in Countries_List]


def finish(results):
    global x
    for result in results:
        print 'GOT PAGE', len(result), 'bytes'
        soup = BeautifulSoup(result)
        tableau = soup.findAll('table')
    try:
        rows = tableau[3].findAll('tr')
        print("Fetching")
        for tr in rows:
        cols = tr.findAll('td')
        y = 0
        x = x + 1
        for td in cols:
            texte_bu = td.text
            texte_bu = texte_bu.encode('utf-8')
            #print("Writing...")
                    #print texte_bu
            ws.write(x,y,td.text)
            y = y + 1
    except(IndexError):
        print("No IA for this country")
        pass

    reactor.stop()

waiting = [client.getPage(url) for url in urls]
defer.gatherResults(waiting).addCallback(finish)

reactor.run()
wb.save("IALOL.xls")
print "Elapsed Time: %s" % (time.time() - start)

よろしくお願いします!

4

1 に答える 1

2

2 つのオプションがあります。GETまたは useの代わりにPOSTgetPageを使用し続けてください。Agent

API ドキュメントはgetPage、サポートされているその他のオプションを見つけるためのAPI ドキュメントをHTTPClientFactory示しています。

後者の API ドキュメントは、明示的にカバーしmethod、暗示しています (ただし、説明が不十分です) postdata。したがって、次のようにPOSTを作成するにはgetPage:

d = getPage(url, method='POST', postdata="hello, world, or whatever.")

(全体的な Web ハウツー ドキュメント インデックスからリンクされている) のハウツー スタイルのドキュメントAgentがあります。これは、本文を含むリクエストを送信する例を示しています (つまり、例を参照してください)。FileBodyProducer

于 2012-04-24T16:57:19.460 に答える