如何将bs4.element.Tag转换为pandas

时间:2018-03-27 14:26:08

标签: python pandas beautifulsoup

我想只解析来自blogspot的文本,并按照下面的方式执行

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("https://edwvb.blogspot.ru/2018/03/3-tipa-povedeniya-kotorye-opredelyayut-uspeshnyh-prodavcov.html")
bsObj = BeautifulSoup(html, "html.parser")

所以我只能通过这种方式来查看帖子的文本

nameList = bsObj.findAll("div", {"dir":"ltr", "style":"text-align: left;", "trbidi":"on"})

但是通过这个我解析了两个对象,当我将它转换为pandas

df = pd.DataFrame(nameList)

我有两行。

                   0
0   \n\n\n\n\n(adsbygoogle = window.adsbygoogle ||...
1   \nПеревод статьи 3 Behaviors That Drive Succes...

我需要解析第1行。我尝试这样做

df = pd.DataFrame(nameList[1])

并获取

TypeError: DataFrame constructor called with incompatible data and dtype: setting an array element with a sequence

nameList [1]的类型为bs4.element.Tag

  type(nameList[1])
  bs4.element.Tag

那么如何将bs4.element.Tag转换为pandas?或者可能有更简单的方法来解析文本blogspot.com?

1 个答案:

答案 0 :(得分:0)

这可能不是一个简单的决定

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("https://edwvb.blogspot.ru/2018/03/3-tipa-povedeniya-kotorye-opredelyayut-uspeshnyh-prodavcov.html")
bsObj = BeautifulSoup(html, "html.parser")

nameList = bsObj.findAll("div", {"dir":"ltr", "style":"text-align: left;", "trbidi":"on"})
nameList = [i.text for i in nameList]

之后我们需要先将nameList[1]转换为pd.Series,然后转换为DataFrame

S = pd.Series(nameList[1])
S.to_frame()