Python美丽的汤 - 功能

时间:2014-05-02 10:44:11

标签: python function beautifulsoup

这是我到目前为止所拥有的

import urllib2
from ntlm import HTTPNtlmAuthHandler
from bs4 import BeautifulSoup
import requests
import os
import bleach
def stripAllTags( html ):
    if html is None:
            return None
    return ''.join( BeautifulSoup( html ).findAll( text = True ) ) 
os.system('clear')

user = '<user>'
password = "<pass>"
url = "<some url>"

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
# create the NTLM authentication handler
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)

# create and install the opener
opener = urllib2.build_opener(auth_NTLM)
urllib2.install_opener(opener)

data = urllib2.urlopen(url)

soup = BeautifulSoup(data)

table = soup.find('ul', {'class': 'dfwp-column dfwp-list'})
td = table.findAll('td')
tr = table.findAll('tr')
   for td in table:
      for tr in td:
        clean = bleach.clean(tr, tags=[], strip=True)
        print clean

如何将其正确转换为函数

table = soup.find('ul', {'class': 'dfwp-column dfwp-list'})
td = table.findAll('td')
tr = table.findAll('tr')
   for td in table:
      for tr in td:
        clean = bleach.clean(tr, tags=[], strip=True)
        print clean

我想在'for'中调用它

1 个答案:

答案 0 :(得分:2)

好的,首先你已经在你的代码中创建了一个urllib2.opener然后你通过使用urllib2.urlopen()来调用网页.....所以你甚至不使用你的开启者或你通过的任何额外的项目创造的麻烦。此外,如果您的代码中指定了用户名和密码,我假设您将在某个时间点登录网站。如果是这样的话,那么你也会处于一个没有cookie处理的伤害世界。我已经重新组织了一些代码,并认为以下内容对您来说应该是一个很好的起点。

此外,这是执行您指定的操作的函数的演练......

  • 在整个beautifulsoup对象中搜索带有dfwp-column dfwp-list类的无序列表
  • td variable = all&#39; td&#39;该匹配中的标签
  • tr variable = all&#39; tr&#39;同一场比赛中的标签
  • 即使你还没有用这两个变量做任何事情......你通过创建一个使用相同变量名的循环来破坏它们,覆盖这些值意味着它们绝对没有任何意义......
  • 对于每个具有该类名的表:(提示只有一个表定义,并且在该格式中&#34;对于tr在td&#34;绝对没有)打印结果的清理....

它没有做它看起来的样子。

要避免这种情况....使用你指定的那些操作的新函数......

def myfunction(b):
    """param is a soup instance"""
    table=b.find('ul', {'class':'dfwp-column dfwp-list'})
    for td in table.findAll('td'):
        for tr in td.findAll('tr'):
            print bleach.clean(tr,tags=[], strip=True)

更少的代码....这样它就能找到正确的数据并正确迭代。像这样:

  • table是带有&#39; dfwp-column dfwp-list&#39;的无序列表类
  • 它会在每个&#39; tr&#39;上打印漂白操作。在每个&t'td&#39;中找到的标签表中找到的标签

试图提供帮助...我已经清理并重新排序您的代码以消除一些浪费并添加已经提到的内容。现在试试这个:

from ntlm import HTTPNtlmAuthHandler
from bs4 import BeautifulSoup
import requests, os, bleach, urllib2, cookielib

user='XXX'
password='XXX'
url='URL'

cookies = cookielib.CookieJar()
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman))

pagedata=opener.open(url)
soup=BeautifulSoup(pagedata)