2017-01-11 7 views
0

このようなことが尋ねられたら謝りますが、私はPythonの初心者であり、これを理解できません。私は最近、linkedinを調べてthisを使って構造化データを返すGoogle CSEを作成しました。 APIはうまく動作しますが、今ではコードをテキスト文書に入れて自分のコンピュータで解析しようとしています。私の正規表現でそれを実行するたびに試して、それが返されます。テキストファイルでgoogle cse htmlを解析するときに、TypeError:予期される文字列またはバイト様オブジェクト

Traceback (most recent call last): 
    File "C:\Users\My_PC\Desktop\CSE.py", line 41, in <module> 
    snippet = re.search(snip,cse).group(1) 
    File "C:\Users\My_PC\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 182, in search 
    return _compile(pattern, flags).search(string) 
TypeError: expected string or bytes-like object 

だから私はバイトに変換するために、私の正規表現の前にBを入れてみました。それは同じエラーにつながったので、私は同じエラーにつながる正規表現のutf-8でそれをエンコードしようとしました。

もう一度申し訳ありませんが、これまでに質問されていますが、わかりません。誰かが私が間違っていることを教えてもらえますか?それは場合に役立ちます。ここ

は、私のコードです:それは述べて

def google_search(search_term, api_key, cse_id, **kwargs): 
    service = build("customsearch","v1",developerKey=api_key) 
    res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute() 
    return res['items'] 


    a=0 
    with open('list.csv', 'r') as f: 
     reader = csv.reader(f) 
     for row in reader: 
      name = row[1]+' '+row[2]+' '+row[4] 
      print("This trial will search for", name) 
      print() 
      results = google_search(name, my_api_key, my_cse_id, num=1) 
      #for result in results: 
      # pprint.pprint(result) 
      a += 1 
      print() 
      print("This is trial", a) 
      print() 
      print('+=+=+=+=+=+=+=+=+') 
      print() 
      time.sleep(2) 
      with open("cse_results.txt", "w+", encoding='utf-8') as cse:#make the files cse_results.txt. cse_results.txt is truncated if it exists 
       cse.write(str(results))#write results to cse_results.txt 
       snip = b'View\s<b>(.+?)&nb'#find string that starts with View in html 
       snippet = re.search(snip,cse).group(1) 
       print(snippet)#check if regex was captured 
      with open("cse_parse.txt", "a") as par:#append the found snippet to the cse_parse.txt file 
       par.write(snippet) 
      for line in cse: 
       snippet = re.findall(snip,line)#search cse_results.txt for the snip pattern 
       print(snippet)#print it to ensure that the regex was found 
       par.write("HTML Snippet:"+snippet)#append match text to to cse_parse.txt 
      if a >= 0: 
       break 

答えて

0

re.search()は、文字列またはバイトのようなオブジェクトを期待しています。コードにファイルオブジェクトであるcseを指定しています。

+0

私はjuust適切に反映するために、自分自身のコードと同様に、固定くぼみで検索するCSE変数を変更そのコードブロックをコード化する。私はまだ同じエラーが発生しています。私はtxtファイル(cse_results.txt)で正規表現を実行しようとしているにもかかわらず、私は開いているCSVファイル(list.csv)内で作業しているのでですか? – SVill

0

私はそれを得ました!私はsnipを変換し、re.search()を文字列に変換しなければならなかった。

明確にするために、私はsnipの正規表現がすでに文字列形式であったという印象を受けていました。私が検索していたので、結果は問題ではないと思いました。私は実際に情報がインターネットをつかまれていたので、両方ともバイトでなければならないという印象を受けました。

私は、コードを削減するために戻って行きましたが、ここで私は参考のために持っているものです。

with open('list.csv', 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     name = row[1] + ' ' + row[2] + ' ' +row[4] 
     print("This trial will search for", name) 
     results = google_search(name, my_api_key, my_cse_id, num=1) 
     for result in results: 
      print(result) 
      snip = r'View\s<b>(.+?)&nb' 
      snippet = re.search(str(snip),str(result)).group(1) 
      with open("cse_result.txt", "w+") as nameLookup: 
       nameLookup.write(snippet) 
      print() 
関連する問題