@rihkddd
2015-09-10T01:49:39.000000Z
字数 1166
阅读 2151
python spider
beautifulsoup 在解析html的时候非常方便。
以下一个脚本为例说明beautifulsoup的使用方法:
#encoding:UTF-8import urllib.requestimport codecsimport refrom bs4 import BeautifulSoup # HTMLfrom bs4 import BeautifulStoneSoup # XMLimport bs4 # ALLf=codecs.open('re.txt','w','utf-8')def GetAuthorandTitle(doc):soup = BeautifulSoup(doc)for author in soup.findAll('span',{'itemprop':'author'}):f.write(str(author.contents[0].contents[0].contents[0]))f.write(", ")f.write("# ")for title in soup.findAll('span',{'class':'title'}):f.write(str(title.contents[0]))f.write("\n")for x in range(1,45):url='http://dblp.uni-trier.de/db/journals/spe/spe'+ '%d' %x+'.html'print(x)data= urllib.request.urlopen(url).read()data = data.decode('UTF-8','ignore')so = BeautifulSoup(data)for div in so.findAll('div',{'class':'data'}):# print(div.contents)# print(''.join(str(div.contents)))GetAuthorandTitle(''.join(str(div.contents)))f.close()
使用findAll函数可以得到符合条件的所有标签:
findAll(name, attrs, recursive, text, limit, **kwargs)
可是用{:}传入复合某个属性的标签。
以上的例子findall即寻找标签为div且有一个属性是class=data的所有div。
findall得到的是一个数组,里面为所有符合条件标签。
contents可以向后遍历html树,即剥去一层标签。
关于python的编码问题,print或者写文件的时候经常会遇到编码错误,此时要分析字符串本身的编码是什么,使用对应的编码进行decode,然后再encode为你想使用的编码。
str和byte。