Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python解析网页_Python_Web_Web Scraping_Beautifulsoup_Html Parsing - Fatal编程技术网

使用python解析网页

使用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

我正在尝试解析一个网页(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标记中的线程链接?感谢您的帮助。

    这里的想法是在
    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')