2017-08-11 14 views
0

私は私の現在のpythonプロジェクトに美しいものを実装するのに苦労しています。そうですね。これをそのままにしておくと、私の現在のスクリプトの複雑さを減らすことができます。Python urllib2 + Beautifulsoup

BeautifulSoupせずにスクリプト -

import urllib2 

    def check(self, name, proxy): 
     urllib2.install_opener(
      urllib2.build_opener(
       urllib2.ProxyHandler({'http': 'http://%s' % proxy}), 
       urllib2.HTTPHandler() 
       ) 
      ) 

     req = urllib2.Request('http://example.com' ,"param=1") 
     try: 
      resp = urllib2.urlopen(req) 
     except: 
      self.insert() 
     try: 
      if 'example text' in resp.read() 
       print 'success' 

今のコースインデントが間違っているあなたが簡単な言葉で、私は "へのPOSTリクエストを送信していますすることができますように、これはちょうど、私が起こっているかのアップスケッチしていますexample.com "& example.comにresp.read print successに" example text "が含まれているとします。

しかし、私は実際に欲しいのは、その後TD内部出力 テキストは私がbeautifulsoupを実装しています方法がない今

soup.find_all('td', {'align':'right'})[4] 

を使用してexample.comからの要求を揃える

if ' example ' in resp.read() 

をチェックすることです作業中、この例 -

import urllib2 
from bs4 import BeautifulSoup as soup 

main_div = soup.find_all('td', {'align':'right'})[4] 

    def check(self, name, proxy): 
     urllib2.install_opener(
      urllib2.build_opener(
       urllib2.ProxyHandler({'http': 'http://%s' % proxy}), 
       urllib2.HTTPHandler() 
       ) 
      ) 

     req = urllib2.Request('http://example.com' ,"param=1") 
     try: 
      resp = urllib2.urlopen(req) 
      web_soup = soup(urllib2.urlopen(req), 'html.parser') 
     except: 
      self.insert() 
     try: 
      if 'example text' in resp.read() 
       print 'success' + main_div 

これで、4つの新しいライン/調整

from bs4 import BeautifulSoup as soup 

web_soup = soup(urllib2.urlopen(url), 'html.parser') 

main_div = soup.find_all('td', {'align':'right'})[4] 

aswell as " + main_div " on print 

それだけで動作していないようですが、私は、そのうちのいくつかを調整しながら、いくつかのエラーを持っていた& "の未結合方式のfind_all「割り当ての前に、参照ローカル変数は」と呼ばれなければならないと述べています最初の引数としてbeautifulsoupインスタンス "あなたの最後のコードスニペットについて

+0

最小限の例を示してください。また、あなたのpythonコードを正しくインデントしてみてください。 最後のコード例については、 'web_soup'変数' web_soup.find_all( 'td'、{'align': 'right'}) 'で' find_all'を呼び出す必要があります。 – johannesmik

+0

私はそれがちょうどスケッチアップであり、インデントが間違っていたと述べましたが、私は主に、インデントに関係なく、これをどのようにまとめるかを知りたいと思います。 switch main_div =スープからmain_div = web_soup? – user3255841

+0

質問に答えるには、他の人があなたの問題を理解できるような最小限の例を提示する必要があります。 3つのスニペットを用意しましたが、すべてが不完全であるか間違ったインデントがあるため、問題を再構築するのが非常に難しいです。 – johannesmik

答えて

1

で:

from bs4 import BeautifulSoup as soup 

web_soup = soup(urllib2.urlopen(url), 'html.parser') 
main_div = soup.find_all('td', {'align':'right'})[4] 

あなたはweb_soupインスタンス上find_allを呼び出す必要があります。また、使用する前にurl変数を定義してください。

from bs4 import BeautifulSoup as soup 

url = "url to be opened" 
web_soup = soup(urllib2.urlopen(url), 'html.parser') 
main_div = web_soup.find_all('td', {'align':'right'})[4]