我想从给定的网站中提取所有主题标签:
例如,“我喜欢#堆栈溢出,因为#人非常#有帮助!”
这应将3个主题标签拉入表中。
在我定位的网站中,有一个带有#tag说明的表格
所以我们可以找到#love这个主题标签谈论爱情

这是我的工作:

    #import the library used to query a website
    import urllib2
    #specify the url
    wiki = "https://www.symplur.com/healthcare-hashtags/tweet-chats/all"
    #Query the website and return the html to the variable 'page'
    page = urllib2.urlopen(wiki)
    #import the Beautiful soup functions to parse the data returned from the
     website
    from bs4 import BeautifulSoup
    #Parse the html in the 'page' variable, and store it in Beautiful Soup
    format
     soup = BeautifulSoup(page, "lxml")
    print soup.prettify()
    s = soup.get_text()
    import re
     re.findall("#(\w+)", s)


我在输出中有问题:
第一个是输出看起来像这样:
[u'eeeeee',
 u'333333',
 u'222222',
 u'222222',
 u'222222',
 u'222222',
 u'222222',
 u'222222',
 u'222222',
 u'AASTGrandRoundsacute'

输出将Hashtag与描述中的第一个单词连接在一起。如果我将示例与在输出为“ lovethis”之前引起的示例进行比较。

我该怎么做,仅提取#标签后面的一个单词。

谢谢

最佳答案

我认为没有必要使用regex来解析从页面中获取的文本,您可以使用BeautifulSoup本身。我在下面的代码中使用Python3.6,只是为了显示整个代码,但重要的一行是hashtags = soup.findAll('td', {'id':'tweetchatlist_hashtag'})。请注意,表中的所有主题标签都具有td标记和id属性= tweetchatlist_hashtag,因此调用.findAll是转到此处的方法:

import requests
import re
from bs4 import BeautifulSoup

wiki = "https://www.symplur.com/healthcare-hashtags/tweet-chats/all"
page = requests.get(wiki).text
soup = BeautifulSoup(page, "lxml")

hashtags = soup.findAll('td', {'id':'tweetchatlist_hashtag'})


现在让我们看一下列表中的第一项:

>>> hashtags[0]
<td id="tweetchatlist_hashtag" itemprop="location"><a href="https://www.symplur.com/healthcare-hashtags/aastgrandrounds/" title="#AASTGrandRounds">#AASTGrandRounds</a></td>


因此,我们看到我们真正想要的是titlea属性值:

>>> hashtags[0].a['title']
'#AASTGrandRounds'


要使用列表推导来获取所有主题标签的列表,请执行以下操作:

>>> lst = [hashtag.a['title'] for hashtag in hashtags]


如果您不使用列表推导语法,则上面的行与此类似:

>>> lst = []
>>> for hashtag in hashtags:
    lst.append(hashtag.a['title'])


lst然后是所需的输出,请参阅列表的前20个项目:

>>> lst[:20]
['#AASTGrandRounds', '#abcDrBchat', '#addictionchat', '#advocacychat', '#AetnaMyHealthy', '#AlzChat', '#AnatQ', '#anzOTalk', '#AskAvaility', '#ASPChat', '#ATtalk', '#autchat', '#AXSChat', '#ayacsm', '#bcceu', '#bccww', '#BCSM', '#benurse', '#BeTheDifference', '#bioethx']

07-26 09:29