我正在尝试解析一个网页(forums.macrumors.com)并获取所有帖子的列表。
所以到目前为止我已经得到了这个:
import urllib2
import re
from BeautifulSoup import BeautifulSoup
address = "http://forums.macrumors.com/forums/os/"
website = urllib2.urlopen(address)
website_html = website.read()
text = urllib2.urlopen(address).read()
soup = BeautifulSoup(text)
现在网页源代码在每个帖子的开头都有这个代码:
<li id="thread-1880" class="discussionListItem visible sticky WikiPost "
data-author="ABCD">
我如何解析这个,以便我可以进入这个li标签内的线程链接?谢谢你的帮助。
答案 0 :(得分:0)
这里的想法是使用CSS selectors并使用a
h3
内的class="title"
获取div
元素class="titleText"
li
在id
元素内部,for link in soup.select("div.discussionList li[id^=thread] div.titleText h3.title a[href]"):
print link["href"]
属性以&#34开头;线程&#34;:
!=
你可以进一步调整选择器,但这应该给你一个很好的起点。
答案 1 :(得分:0)
因此,从您的代码中,您有soup
对象,其中包含您的html的BeautifulSoup
对象。问题是你要寻找的那个标签的哪一部分是静态的? id
总是一样的吗? class
?
按id
:
my_li = soup.find('li', {'id': 'thread-1880'})
按class
:
my_li = soup.find('li', {'class': 'discussionListItem visible sticky WikiPost "})
理想情况下,您可以找出可以检查的唯一类,并使用它而不是类列表。
如果您希望此对象中包含a
标记,则可以执行以下操作来检查:
if my_li and my_li.a:
print my_li.a.attrs.get('href')
我总是建议您进行检查,因为如果my_li
最终为None
或其中没有a
,则您的代码将失败。
有关更多详细信息,请查看BeautifulSoup文档 http://www.crummy.com/software/BeautifulSoup/bs4/doc/