@rihkddd
2015-09-10T09:49:39.000000Z
字数 1166
阅读 1975
python
spider
beautifulsoup 在解析html的时候非常方便。
以下一个脚本为例说明beautifulsoup的使用方法:
#encoding:UTF-8
import urllib.request
import codecs
import re
from bs4 import BeautifulSoup # HTML
from bs4 import BeautifulStoneSoup # XML
import bs4 # ALL
f=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。