【问题标题】:How to rectify a TypeError in python?Beautiful Soup string to tag error?如何纠正 Python 中的 TypeError?Beautiful Soup 字符串标记错误?
【发布时间】:2016-05-30 03:28:41
【问题描述】:

这是一个简单的 sn-p 来抓取维基百科网站并分别打印其每个内容,例如在单独的变量中转换和在单独的变量中生成等等.. 在第一个名为“bodyContent”的 div 中,还有一个名为“mw-content-text”的 div,这里我的问题是检索标签“h2”之前第一段的数据,我有一个代码 sn-p 来解决这并且无法从 BeautifulSoup 标记从字符串转换,错误是 TypeError: unsupported operand type(s) for +: 'Tag' and 'str'

import urllib
from bs4 import BeautifulSoup

url ="https://en.wikipedia.org/wiki/Deadpool_(film)"
htmlfile = urllib.urlopen(url)
htmltext = htmlfile.read()

soup = BeautifulSoup(htmltext,"lxml")
#print soup.prettify()
movie_title = soup.find('h1',{'id':'firstHeading'})
print movie_title.text
movie_info = soup.find_all('p')
#print movie_info[0].text 
#print movie_info[1].text
'''I dont want like this because we dont know how many
 intro paragraphs will be so we have to scrape all paras just before that h2 tag'''

这里问题出现了,我想迭代并添加 .next_sibling 并创建一个 try-exception 块来查找

"resultant_next_url.name == 'p'"

def findNextSibling(base_url):
    tag_addition = 'next_sibling'
    next_url = base_url+'.'+tag_addition
    return next_url

最后还是这样做

base_url = movie_info[0]
resultant_url = findNextSibling(base_url)
print resultant_url.text

【问题讨论】:

  • 为什么要给标签加字符串?
  • 我不想我只想像这个movie_info[0]一样循环,每次都附加.next_sibling并在其中打印文本直到出现h2标签
  • ​​​​​​​​​​​​​​​你的意思是return base_url.next_sibling?或者你只想要resultant_url = base_url.next_sibling
  • Yaa 返回 base_url.next_sibling 但是当我们再次调用它时它应该返回movie_info[0].next_sibling.next_sibling

标签: python python-2.7 python-3.x beautifulsoup urllib2


【解决方案1】:

终于找到答案了,这是解决问题

import urllib
from bs4 import BeautifulSoup

url ="https://en.wikipedia.org/wiki/Deadpool_(film)"
htmlfile = urllib.urlopen(url)
htmltext = htmlfile.read()

soup = BeautifulSoup(htmltext,"lxml")
#print soup.prettify()
movie_title = soup.find('h1',{'id':'firstHeading'})
print movie_title.text

movie_info = soup.find_all('p')
# print movie_info[0].text
# print movie_info[1].text

def findNextSibling(resultant_url):
    #tag_addition = 'next_sibling'
    #base_url.string = base_url.string + '.' + tag_addition
    return resultant_url.next_sibling

resultant_url = movie_info[0]
resultant_url = findNextSibling(resultant_url)
print resultant_url.text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2013-02-28
    • 2016-11-27
    • 2016-06-10
    • 2022-07-16
    • 2014-05-31
    • 2017-12-05
    相关资源
    最近更新 更多