使用python解析网页
我正在尝试解析一个网页(forums.macrumors.com),并获得所有帖子的列表 到目前为止,我已经做到了:使用python解析网页,python,web,web-scraping,beautifulsoup,html-parsing,Python,Web,Web Scraping,Beautifulsoup,Html Parsing,我正在尝试解析一个网页(forums.macrumors.com),并获得所有帖子的列表 到目前为止,我已经做到了: import urllib2 import re from BeautifulSoup import BeautifulSoup address = "http://forums.macrumors.com/forums/os/" website = urllib2.urlopen(address) website_html
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标记中的线程链接?感谢您的帮助。这里的想法是在
h3
中使用a
元素,在div
中使用class=“title”
,在li
元素中使用a
元素,该元素具有以“thread”开头的id
属性:
您可以进一步调整选择器,但这将为您提供一个良好的起点。因此,从这里的代码中,您有了
soup
对象,其中包含html的BeautifulSoup
对象。问题是你要找的标签的哪一部分是静态的?id
是否始终相同?类
通过id
查找:
my_li = soup.find('li', {'id': 'thread-1880'})
通过类进行查找
:
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文档
请参阅:线程不会是静态的,但我只想获取该页面上的所有线程xxxx。
if my_li and my_li.a:
print my_li.a.attrs.get('href')