0

これは非常に長い質問であり、何かを見落としている可能性があるため、さらに情報が必要な場合は質問してください。

私はscaperwikiを使用してGoogleの学者からデータをスクレイピングしてきました.最近まで、私はすべてのURLをこのように入れていました.

elec_urls = """http://1.hidemyass.com/ip-5/encoded/Oi8vc2Nob2xhci5nb29nbGUuY29tL2NpdGF0aW9ucz91c2VyPWo0YnRpeXNBQUFBSiZobD1lbg%3D%3D&f=norefer
http://4.hidemyass.com/ip-1/encoded/Oi8vc2Nob2xhci5nb29nbGUuY29tL2NpdGF0aW9ucz91c2VyPVZXaFJiZEFBQUFBSiZobD1lbg%3D%3D&f=norefer
http://4.hidemyass.com/ip-2/encoded/Oi8vc2Nob2xhci5nb29nbGUuY29tL2NpdGF0aW9ucz91c2VyPV84X09JSWNBQUFBSiZobD1lbg%3D%3D&f=norefer
http://1.hidemyass.com/ip-4/encoded/Oi8vc2Nob2xhci5nb29nbGUuY29tL2NpdGF0aW9ucz91c2VyPUh3WHdmTGtBQUFBSiZobD1lbg%3D%3D&f=norefer
http://4.hidemyass.com/ip-1/encoded/Oi8vc2Nob2xhci5nb29nbGUuY29tL2NpdGF0aW9ucz91c2VyPXU1NWFWZEFBQUFBSiZobD1lbg%3D%3D&f=norefer
""".strip()

elec_urls = elec_urls.splitlines()

次に、各ページをスクレイピングし、必要な情報を辞書のリストに入れ、一度並べ替え、重複を削除してから、別のキーを使用して再度並べ替えます。次に、必要な情報を Google ドキュメント スプレッドシートにエクスポートします。これは 100% 機能します。

別の Google ドキュメント スプレッドシートを使用できるように変更しようとしました。ここからすべての URL を入力すると、同じことが行われます。以下は私がこれまでに行ったことです。

def InputUrls(Entered_doc, EnteredURL):
    username = 'myemail'
    password = 'mypassword'
    doc_name = Entered_doc
    spreadsheet_id = Entered_doc
    worksheet_id = 'od6'

    # Connect to Google
    gd_client = gdata.spreadsheet.service.SpreadsheetsService()
    gd_client.email = username 
    gd_client.password = password  
    gd_client.source = EnteredURL
    gd_client.ProgrammaticLogin()

    #Now that we're connected, we query the spreadsheet by name, and extract the unique spreadsheet and worksheet IDs.

    rows = gd_client.GetListFeed(spreadsheet_id, worksheet_id).entry
    #At this point, you have a row iterator which will yield rows for the spreadsheet. This example will print everything out, keyed by column names:
    urlslist = []
    for row in rows:
        for key in row.custom:
            urlslist.append(row.custom[key].text)
        return urlslist

def URLStoScrape(ToScrape):
    Dep = []
    for i in range(0,len(ToScrape)):
        Department_urls = ToScrape[i].strip()
        Department_urls = Department_urls.splitlines() 
        Done = MainScraper(Department_urls)
        Dep.append(Done)
    
return Dep

ElectricalDoc = '0AkGb10ekJtfQdG9EOHN0VzRDdVhWaG1kNVEtdVpyRlE'
ElectricalUrl = 'https://docs.google.com/spreadsheet/ccc?    '
ToScrape_Elec = InputUrls(ElectricalDoc, ElectricalUrl)

これは問題ないように見えますが、プログラムがソートされると、以下のエラーが発生します。

トレースバック (最新の呼び出しが最後): ファイル "./code/scraper"、行 230、Total_and_Hindex_Electrical = GetTotalCitations(Electrical) ファイル "./code/scraper"、行 89、GetTotalCitations 内 Wrt_CitationURL = Sorting(Department, "CitationURL" ) ファイル "./code/scraper"、15 行目、並べ替え中 SortedData = sorted(Unsorted, reverse = True, key = lambda k: k[pivot]) ファイル "./code/scraper"、15 行目、SortedData = sorted(Unsorted, reverse = True, key = lambda k: k[pivot]) TypeError: リストのインデックスは str ではなく整数でなければなりません

URLStoScrape 関数と関係があることはほぼ確実だと思いますが、修正方法がわかりません。

さらに情報が必要な場合はお知らせください。

4

1 に答える 1

0

問題は89行目だと思いますが、

GetTotalCitations Wrt_CitationURL = Sorting(Department, "CitationURL")

「CitationUrl」が整数インデックスであるか、 key関数に渡される value の値がsorted()ディクショナリである必要があります。

于 2013-08-21T04:27:59.107 に答える