この記事では主にBeautiful Soupを使ってdomを解析する方法を紹介します。
Beautiful Soup は、ナビゲーション、検索、解析ツリーの変更、その他の機能を処理するための、いくつかのシンプルな Python スタイルの関数を提供します。これは、ドキュメントを解析することでクロールする必要があるデータをユーザーに提供するツールボックスです。シンプルなので、多くのコードを使用せずに完全なアプリケーションを作成できます。
Beautiful Soup は、入力ドキュメントを Unicode エンコードに、出力ドキュメントを UTF-8 エンコードに自動的に変換します。ドキュメントでエンコード方式が指定されていない限り、エンコード方式を考慮する必要はありません。その場合、Beautiful Soup はエンコード方式を自動的に識別できません。あとは、元のエンコード方式を指定するだけです。
Beautiful Soup は、lxml や html6lib のような優れた Python インタプリタとなり、ユーザーにさまざまな解析戦略や強力な速度を提供する柔軟性を提供します。
ブロガーはMacを使用しています。ここではMacでのBeautiful Soupのインストール方法のみを紹介します。 Python サードパーティ ライブラリのインストールは非常に簡単です。著者は常に pip を使用してインストールしていました。
pipのインストール
easy_install pip
Beautiful Soupのインストール
pip install beautifulsoup4
pip install beautifulsoup4コマンドを使用してインストールすると、エラーが報告されることがあります。このとき、権限を取得するためにコマンドの前にsudoを追加する必要があります。
sudo pip install beautifulsoup4
これで準備は完了しました。これで、Beautiful Soup を使用できるようになります。この記事では bs4 の一部のメソッドのみを使用します (注: 記事内では bs4=Beautifulsoup4 )。BS4 について詳しく知りたい場合は、投稿者のプロジェクトは非常に単純な Index.py と HTML フォルダーです。 html 静的ファイル
index.py ファイル
# coding=utf-8import osfrom bs4 import BeautifulSoupimport sys #定义一个list来存放文件路径paths=[]#获取所有的文件路径def get_paths(): for fpathe,dirs,fs in os.walk('html'): for f in fs: #print os.path.join(fpathe,f) #将拼接好的path存放到list中 filepath=os.path.join(fpathe,f) #只放入.html后缀文件路径 if(os.path.splitext(f)[1]==".html"): paths.append(filepath)#读取html文件修改后并写入相应的文件中去def reset_file(path): #判断文件是否存在 if not os.path.isfile(path): raise TypeError(path + " does not exist") #读取文件,bs4自动将输入文档转换为Unicode编码, #输出文档转换为utf-8编码,bs4也可以直接读取html #字符串,例如BeautifulSoup('<p>content</p>') soup=BeautifulSoup(open(path)) #select是bs4提供的方法,和jquery的$选择器一样 #方便。可以标签(eg:p,title,p...)来查找,也 #也可以通过css的 class .和id #来查找,基本上和我们 #使用$一样。 #选取id="nav"节点下的所有li元素里面的a标签,返回值是一个list集合 nav_a=soup.select("#nav li a") #修改a的href属性 if(len(nav_a)>1): nav_a[0]["href"]="/m/" nav_a[1]["href"]="/m/about_mobile/m_about.html" #选取class="footer"里的所有a标签 footer_a=soup.select(".footer a") if(len(footer_a)>0): footer_a[1]["href"]="/m/about_mobile/m_sjdt.html" content_p=soup.select(".content p") #修改<p>我是string</p>里面的文本内容 if(len(content_p)>0): content_p[0].string="修改p标签里面的测试内容" #修改系统的默认编码 reload(sys) sys.setdefaultencoding('utf-8') #打开相应的文件写入模式,打开文件不要放入try里面,否则会 #出现异常 f=open(path,"w") try: #写入文件 f.write(soup.prettify()) finally: #关闭文件 file.close()#定义main函数程序的入口 if __name__=="__main__": get_paths() #遍历所有文件路径 for p in paths: reset_file(p)
以上がBeautiful Soup を使用して DOM を解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。