标签 python html
Hashtags python html
我想从给定网站中提取所有主题标签:
例如,"I love #stack overflow because #people are very #helpful!"
这应该将 3 个主题标签拉入 table。
在我定位的网站中,有一个带有#tag 描述的 table
所以我们可以找到#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)
我的输出有问题:
第一个是输出如下所示:
[你啊啊啊啊啊啊啊啊啊
你'333333',
你'222222',
你'222222',
你'222222',
你'222222',
你'222222',
你'222222',
你'222222',
u'AASTGrandRoundsacute'
输出将标签与描述中的第一个词连接起来。如果我与我在输出 'lovethis'.
之前唤起的示例进行比较
如何才能只提取主题标签后的一个词。
谢谢
我认为没有必要使用 regex
来解析您从页面获得的文本,您可以使用 BeautifulSoup
本身。我在下面的代码中使用 Python3.6,只是为了显示整个代码,但重要的是 hashtags = soup.findAll('td', {'id':'tweetchatlist_hashtag'})
。请注意 table 中的所有主题标签都有 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>
所以我们看到我们真正想要的是a
的title
属性的值:
>>> 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']
我想从给定网站中提取所有主题标签: 例如,"I love #stack overflow because #people are very #helpful!" 这应该将 3 个主题标签拉入 table。 在我定位的网站中,有一个带有#tag 描述的 table 所以我们可以找到#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)
我的输出有问题: 第一个是输出如下所示: [你啊啊啊啊啊啊啊啊啊 你'333333', 你'222222', 你'222222', 你'222222', 你'222222', 你'222222', 你'222222', 你'222222', u'AASTGrandRoundsacute'
输出将标签与描述中的第一个词连接起来。如果我与我在输出 'lovethis'.
之前唤起的示例进行比较如何才能只提取主题标签后的一个词。
谢谢
我认为没有必要使用 regex
来解析您从页面获得的文本,您可以使用 BeautifulSoup
本身。我在下面的代码中使用 Python3.6,只是为了显示整个代码,但重要的是 hashtags = soup.findAll('td', {'id':'tweetchatlist_hashtag'})
。请注意 table 中的所有主题标签都有 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>
所以我们看到我们真正想要的是a
的title
属性的值:
>>> 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']