返回信息流比如我想把某个帖子的某一段文字输出到一个html文件中,可是执行完打开test.html却发现是乱码,经过达人指点后应该是encode和decode的问题。
现在想用beautifulsoup的方法,比如提取div class的部分,然后想提取text并输出到html文件,但是发现使用soup.text方法会丢失<br>等,这样导致输出文字格式变化了,有没有解决办法呢?
#! usr/bin/env python
# -*- coding: utf-8 -*-
import os
import requests
from BeautifulSoup import BeautifulSoup
url = 'http://bbs.byr.cn/article/MobileTerminalAT/17648'
header = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, compress',
'Accept-Language': 'en-us;q=0.5,en;q=0.3',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36' }
s = requests.Session()
r = s.get(url, headers=header).content
r_soup = BeautifulSoup(r)
res = r_soup.findAll('div', {'class': 'a-content-wrap'})
for item in res:
print item.text
print '!!!!!!!!!!!!!!!!!'
open(os.getcwd() + '/' + 'test2.html', 'a').write(item.text.encode('GB2312'))
这是一条镜像帖。来源:北邮人论坛 / python / #4132同步于 2014/11/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
beautifulsoup怎样提取某一部分内容
buptmuye
2014/11/12镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
网页采用的是GBK编码,所以write了会有问题,最后一行改成 open(os.getcwd() + '/' + 'test.html', 'wb').write(namecont.decode('gbk').encode('utf-8')) 应该可以的,亲测
赞 是这样。
能否再问个beautifulsoup的事,就是我想提取中文的一段文字,使用soup.text之后发现会过滤掉<br>等,这样再输出到html的时候就和原来不一样了,这个有办法解决吗?
【 在 lpy0 的大作中提到: 】
: 网页采用的是GBK编码,所以write了会有问题,最后一行改成 open(os.getcwd() + '/' + 'test.html', 'wb').write(namecont.decode('gbk').encode('utf-8')) 应该可以的,亲测
lxml也有这样的问题唉,
http://stackoverflow.com/questions/18660382/how-can-i-preserve-br-as-newlines-with-lxml-html-text-content-or-equivalent
【 在 buptmuye 的大作中提到: 】
: 赞 是这样。
: 能否再问个beautifulsoup的事,就是我想提取中文的一段文字,使用soup.text之后发现会过滤掉<br>等,这样再输出到html的时候就和原来不一样了,这个有办法解决吗?
如果转成str是倒是可以进行提取操作
【 在 reverland (从未如此热爱过生活) 的大作中提到: 】
: lxml也有这样的问题唉,
: http://stackoverflow.com/questions/18660382/how-can-i-preserve-br-as-newlines-with-lxml-html-text-content-or-equivalent
通过『我邮2.0』发布
BeautifulSoup用的很少。。。 都是直接正则匹配。。。 还是找常用的人来解答问题吧~~~
【 在 buptmuye 的大作中提到: 】
: 赞 是这样。
: 能否再问个beautifulsoup的事,就是我想提取中文的一段文字,使用soup.text之后发现会过滤掉<br>等,这样再输出到html的时候就和原来不一样了,这个有办法解决吗?
有 不知道你要抓的网页是怎么样的
1.要提取的文本里带<br>文本都是要用的,那就findAll('br')
2.如果某些其他的东西也带了<br>,那就先find到你要提取的那个div,然后再提br,或者你都findall出来再筛选。
【 在 buptmuye 的大作中提到: 】
: 赞 是这样。
: 能否再问个beautifulsoup的事,就是我想提取中文的一段文字,使用soup.text之后发现会过滤掉<br>等,这样再输出到html的时候就和原来不一样了,这个有办法解决吗?
你说的对,是br?
【 在 shaonianpai (少年pi || TIMC) 的大作中提到: 】
: 有 不知道你要抓的网页是怎么样的
: 1.要提取的文本里带<br>文本都是要用的,那就findAll('br')
: 2.如果某些其他的东西也带了<br>,那就先find到你要提取的那个div,然后再提br,或者你都findall出来再筛选。
通过『我邮2.0』发布
对,任何标签都可以用,find('标签名')来找,返回的,就是带这个标签名的字符串
eg:
soup=<p class="title"><b>The Dormouse's story</b></p>
soup.find.('b')
>> <b>The Dormouse's story</b>
【 在 buptmuye 的大作中提到: 】
: 你说的对,是br?
:
: 通过『我邮2.0』发布