想要将下面的内容按照{'作者':'[美]卡勒德·胡赛尼','出版社':'上海人民出版社'}
这样的格式保存在 dict 中。但是有效信息的位置太多样了,作为 Python 的初学者,刚刚接触美丽的汤,处理起来还不是很得心应手,希望有大佬帮忙解决一下。
<div id="info" class="">
<span class="pl">作者:</span>
<a href="https://book.douban.com/author/997810/">
[美]
卡勒德·胡赛尼</a>
<br>
<span class="pl">出版社:</span> 上海人民出版社<br>
<span class="pl">出品方:</span> <a href="https://book.douban.com/series/39071?brand=1">世纪文景</a><br>
<span class="pl">原作名:</span> The Kite Runner<br>
<span class="pl">译者:</span>
<a href="https://book.douban.com/author/4528877/">
李继宏</a>
<br>
<span class="pl">出版年:</span> 2006-5<br>
<span class="pl">页数:</span> 362<br>
<span class="pl">定价:</span> 29.00 元<br>
<span class="pl">装帧:</span> 平装<br>
<span class="pl">丛书:</span> <a href="https://book.douban.com/series/19760">卡勒德·胡赛尼作品</a><br>
<span class="pl">ISBN:</span> 9787208061644<br>
</div>
把抓到的整个 div 变成字符串,然后对字符串做格式化处理。但是有类似原作名等字段让处理空格变成了难题。
def getBookInfos(urlList):
L = []
for url in urlList:
try:
html = urlopen(url[0])
except HTTPError as e:
print(e)
print(url[0])
print(url[1])
bsObj = BeautifulSoup(html, 'lxml')
tagObjs = bsObj.findAll('div', {'id': 'info'})
# 其实这个循环里只有一个 tag 参与
for tag in tagObjs:
dict = {}
tag = str(tag)
tag = tag.replace('<br/>', '*')
reg = re.compile('<[^>]*>')
content = reg.sub('', tag).replace('\n', '').replace(' ', '').replace('\xa0', '')
infoList = content.split('*')
infoList.pop()
for info in infoList:
info = info.split(':')
dict[info[0]] = info[1]
L.append(dict)
return L
希望能有大佬提供下解决思路,谢谢谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.