Python 3 Beautiful Soup数据类型不兼容问题

时间:2013-09-01 22:28:17

标签: python beautifulsoup python-3.3

你好堆栈社区!

我遇到了一个似乎无法解决的问题,因为看起来大多数问题都适用于Python 2.7。

我想从网页中提取一个表格,然后只获取linktext而不是整个锚点。

这是代码:     来自urllib.request import urlopen     来自bs4进口BeautifulSoup     导入重新

url = 'http://www.craftcount.com/category.php?cat=5'

html = urlopen(url).read()
soup = BeautifulSoup(html)
alltables = soup.findAll("table")

## This bit captures the input from the previous sequence
results=[]
for link in alltables:
    rows = link.findAll('a')
## Find just the names
    top100 = re.findall(r">(.*?)<\/a>",rows)
print(top100)

当我运行它时,我得到:“TypeError:期望的字符串或缓冲区”

直到第二行到最后一行,它完成所有操作(当我为'print(rows)'换出'print(top100)'时)。

作为我得到的回应的一个例子:

<a href="http://www.etsy.com/shop.php?user_id=5323531"target="_blank">michellechangjewelry</a>

我只需要得到: michellechangjewelry

根据pythex.org,我的(ir)正则表达式应该有效,所以我想知道是否有人知道如何做到这一点。作为一个额外的问题,看起来大多数人都喜欢走另一条路,也就是说,从拥有全文并且只想要URL部分。

最后,我使用BeautifulSoup是出于“方便”,但如果你能建议一个更好的软件包来缩小对linktext的解析,我就不会对它感兴趣。

非常感谢提前!!

1 个答案:

答案 0 :(得分:0)

BeautifulSoup结果不是字符串;他们大多是Tag objects

查找<a>代码的文字,使用.string attribute

for table in alltables:
    link = table.find('a')
    top100 = link.string
    print(top100)

这会在表格中找到第一个 <a>链接。要查找所有链接的所有文本:

for table in alltables:
    links = table.find_all('a')
    top100 = [link.string for link in links]
    print(top100)