想要将下面的内容按照{'作者':'[美]卡勒德胡赛尼','出版社':'上海人民出版社'}
这样的格式保存在 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
希望能有大佬提供下解决思路,谢谢谢谢
![]() | 1 SuperMaskv OP ...这么难受吗都没人理我 |
![]() | &nsp; 2 adrianyoung 2019-03-19 19:43:22 +08:00 额,xpath(string(.))试一下不,印象中可以的把 |
![]() | 3 ml1344677 2019-03-20 16:25:34 +08:00 hello 你的问题描述我大致清楚。我提供的思路是,find_all() id=info 下的所有 span 然后根据 class p1 拿到字段名 接着获取该 span 下除了字段名外所有字符即为 该字段的值。另外,这个页面的数据是比较格式化的 不建议使用正则来处理。 |
![]() | 4 ml1344677 2019-03-20 16:29:58 +08:00 sorry 补充一点就是 span 下的意思是 下一个 span 之前的所有标签。 |
![]() | 5 SuperMaskv OP @adrianyoung xpath 还没有接触到,我到时候研究研究,谢谢 |
![]() | 6 SuperMaskv OP @ml1344677 我明白你的意思,之前也有试过你提供的方法,但是那个 ‘译者’ 处理起来还是很麻烦。还是谢谢你的详细回答。可能是我掌握的工具太少了,我再研究研究 |
![]() | 7 yxlbeyond 2019-03-21 18:36:52 +08:00 建议是 xpath 和 regx 配合着使用,确保每一个 key 对应的 value 都是正确的 |