[关闭]
@rihkddd 2015-09-10T01:49:39.000000Z 字数 1166 阅读 1866

beautifulsoup 使用 python编码问题

python spider


beautifulsoup 在解析html的时候非常方便。

以下一个脚本为例说明beautifulsoup的使用方法:

  1. #encoding:UTF-8
  2. import urllib.request
  3. import codecs
  4. import re
  5. from bs4 import BeautifulSoup # HTML
  6. from bs4 import BeautifulStoneSoup # XML
  7. import bs4 # ALL
  8. f=codecs.open('re.txt','w','utf-8')
  9. def GetAuthorandTitle(doc):
  10. soup = BeautifulSoup(doc)
  11. for author in soup.findAll('span',{'itemprop':'author'}):
  12. f.write(str(author.contents[0].contents[0].contents[0]))
  13. f.write(", ")
  14. f.write("# ")
  15. for title in soup.findAll('span',{'class':'title'}):
  16. f.write(str(title.contents[0]))
  17. f.write("\n")
  18. for x in range(1,45):
  19. url='http://dblp.uni-trier.de/db/journals/spe/spe'+ '%d' %x+'.html'
  20. print(x)
  21. data= urllib.request.urlopen(url).read()
  22. data = data.decode('UTF-8','ignore')
  23. so = BeautifulSoup(data)
  24. for div in so.findAll('div',{'class':'data'}):
  25. # print(div.contents)
  26. # print(''.join(str(div.contents)))
  27. GetAuthorandTitle(''.join(str(div.contents)))
  28. f.close()

使用findAll函数可以得到符合条件的所有标签:
findAll(name, attrs, recursive, text, limit, **kwargs)
可是用{:}传入复合某个属性的标签。
以上的例子findall即寻找标签为div且有一个属性是class=data的所有div。
findall得到的是一个数组,里面为所有符合条件标签。

contents可以向后遍历html树,即剥去一层标签。

关于python的编码问题,print或者写文件的时候经常会遇到编码错误,此时要分析字符串本身的编码是什么,使用对应的编码进行decode,然后再encode为你想使用的编码。
str和byte。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注