问题:用Beautifulsoup抓取网页,网页中含有br标签,抓取相关的内容结果是None。
试了用字符串的replace函数替换br,还是返回None。试了用re正则替换br,提示返回类型错误。
原因:br标签通常是单独使用,但Beautifulsoup只能抓取成对的标签,所以碰到br时返回None。
办法:网页就是一个字符串,可以用字符串内建函数repalce先把网页中的br标签替换为空,再用Beautifulsoup抓取网页内容。开始使用replace报错,是因为直接对soup使用repalce,但soup不是字符串对象,没有replace方法,所以没法去除br。
对于requests获取的网页,可以用r.text获取字符串,再用replace去除br。
重点:搞清楚库返回的对象类型,才能用正确方法进行处理。
代码:
from bs4 import BeautifulSoup
html_doc='''
1
2(一心
一意)
3(两全
齐美)
放弃1次
'''
soup=BeautifulSoup(html_doc,'lxml')
for i in soup.find_all('td'):
print(i.string)
结果:
1
None
None
None
修改后:
new_html=(html_doc.replace('
','')).replace('
','') #网页就是一个字符串对象,可以使用replace替代
soup=BeautifulSoup(new_html,'lxml')
对于requests获取的网页内容:
r=requests.get(url)
newr=r.text.replace('
','')