【问题标题】:Beautifulsoup not work rightBeautifulsoup 不能正常工作
【发布时间】:2017-08-06 23:59:53
【问题描述】:

我想从http://thuvienphapluat.vn/ 解析,我想用 id="VBPLMOI" 剪断 div 标签。

当我通过 css $$('#VBPLMOI')[0] 在控制台中键入它时,我得到的结果是 div 标签中有 5 个元素的数组,它就在这个页面上。 pic of 5 elements

<div id="VBPLMOI" style="display: block;">
                        


        <div class="content-0">
            <div class="left-col">
                <div class="number">
                    1</div>
                <div class="nq">
                    <p class="nqTitle" lawid="342641">
                        <a onclick="Doc_CT(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx">Thông tư 06/2017/TT-BGDĐT Quy chế đào tạo vừa làm vừa học trình độ đại học do Bộ trưởng Bộ Giáo dục và Đào tạo ban hành</a>
                    </p>
                    <p class="links-bot">
                        <a onmouseover="LS_Tip_New(13,0,1)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Tiếng Anh</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,2)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Văn bản gốc</a>
                        |
                        <a onclick="Doc_Rel(MemberGA)" onmouseover="LS_Tip_New(13,0,4)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx?tab=3">Lược đồ</a>
                        |
                        <a onclick="Doc_ST(MemberGA)" onmouseover="LS_Tip_New(13,0,3)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx?tab=4">Liên quan hiệu lực</a>
                        |
                        <a onclick="Doc_DL(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx?tab=7">Tải về</a>
                        
                        
                    </p>
                    
                </div>
                <p></p>
            </div>
            <div class="right-col">
                <p>
                    <span style="color: #000">Ban hành:</span>
                    15/03/2017</p>
                <p><span style="color:#000">Hiệu lực:</span> <span style="color:#8C0945"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p><span style="color:#000">Tình trạng:</span> <span class="text-red"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p>
                    <span style="color: #000">Cập nhật:
                        16/03/2017</span></p>
            </div>
        </div>
    
        <div class="content-1">
            <div class="left-col">
                <div class="number">
                    2</div>
                <div class="nq">
                    <p class="nqTitle" lawid="342642">
                        <a onclick="Doc_CT(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-07-2017-TT-BGDDT-lien-ket-dao-tao-trinh-do-dai-hoc-342642.aspx">Thông tư 07/2017/TT-BGDĐT Quy định về liên kết đào tạo trình độ đại học do Bộ trưởng Bộ Giáo dục và Đào tạo ban hành</a>
                    </p>
                    <p class="links-bot">
                        <a onmouseover="LS_Tip_New(13,0,1)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Tiếng Anh</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,2)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Văn bản gốc</a>
                        |
                        <a onclick="Doc_Rel(MemberGA)" onmouseover="LS_Tip_New(13,0,4)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-07-2017-TT-BGDDT-lien-ket-dao-tao-trinh-do-dai-hoc-342642.aspx?tab=3">Lược đồ</a>
                        |
                        <a onclick="Doc_ST(MemberGA)" onmouseover="LS_Tip_New(13,0,3)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-07-2017-TT-BGDDT-lien-ket-dao-tao-trinh-do-dai-hoc-342642.aspx?tab=4">Liên quan hiệu lực</a>
                        |
                        <a onclick="Doc_DL(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-07-2017-TT-BGDDT-lien-ket-dao-tao-trinh-do-dai-hoc-342642.aspx?tab=7">Tải về</a>
                        
                        
                    </p>
                    
                </div>
                <p></p>
            </div>
            <div class="right-col">
                <p>
                    <span style="color: #000">Ban hành:</span>
                    15/03/2017</p>
                <p><span style="color:#000">Hiệu lực:</span> <span style="color:#8C0945"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p><span style="color:#000">Tình trạng:</span> <span class="text-red"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p>
                    <span style="color: #000">Cập nhật:
                        16/03/2017</span></p>
            </div>
        </div>
    
        <div class="content-0">
            <div class="left-col">
                <div class="number">
                    3</div>
                <div class="nq">
                    <p class="nqTitle" lawid="342711">
                        <a onclick="Doc_CT(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Van-hoa-Xa-hoi/Quyet-dinh-329-QD-TTg-De-an-phat-trien-van-hoa-doc-trong-cong-dong-den-2020-dinh-huong-2030-2017-342711.aspx">Quyết định 329/QĐ-TTg năm 2017 phê duyệt Đề án phát triển văn hóa đọc trong cộng đồng đến năm 2020, định hướng đến năm 2030 do Thủ tướng Chính phủ ban hành</a>
                    </p>
                    <p class="links-bot">
                        <a onmouseover="LS_Tip_New(13,0,1)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Tiếng Anh</a>
                        |
                        <a onclick="Doc_Scan(MemberGA)" onmouseover="LS_Tip_New(13,0,2)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Van-hoa-Xa-hoi/Quyet-dinh-329-QD-TTg-De-an-phat-trien-van-hoa-doc-trong-cong-dong-den-2020-dinh-huong-2030-2017-342711.aspx?tab=2">Văn bản gốc</a>
                        |
                        <a onclick="Doc_Rel(MemberGA)" onmouseover="LS_Tip_New(13,0,4)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Van-hoa-Xa-hoi/Quyet-dinh-329-QD-TTg-De-an-phat-trien-van-hoa-doc-trong-cong-dong-den-2020-dinh-huong-2030-2017-342711.aspx?tab=3">Lược đồ</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,3)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Liên quan hiệu lực</a>
                        |
                        <a onclick="Doc_DL(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Van-hoa-Xa-hoi/Quyet-dinh-329-QD-TTg-De-an-phat-trien-van-hoa-doc-trong-cong-dong-den-2020-dinh-huong-2030-2017-342711.aspx?tab=7">Tải về</a>
                        
                        
                    </p>
                    
                </div>
                <p></p>
            </div>
            <div class="right-col">
                <p>
                    <span style="color: #000">Ban hành:</span>
                    15/03/2017</p>
                <p><span style="color:#000">Hiệu lực:</span> <span style="color:#8C0945"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p><span style="color:#000">Tình trạng:</span> <span class="text-red"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p>
                    <span style="color: #000">Cập nhật:
                        16/03/2017</span></p>
            </div>
        </div>
    
        <div class="content-1">
            <div class="left-col">
                <div class="number">
                    4</div>
                <div class="nq">
                    <p class="nqTitle" lawid="321445">
                        <a onclick="Doc_CT(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Tai-chinh-nha-nuoc/Nghi-dinh-25-2017-ND-CP-bao-cao-tai-chinh-nha-nuoc-321445.aspx">Nghị định 25/2017/NĐ-CP về báo cáo tài chính nhà nước</a>
                    </p>
                    <p class="links-bot">
                        <a onmouseover="LS_Tip_New(13,0,1)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Tiếng Anh</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,2)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Văn bản gốc</a>
                        |
                        <a onclick="Doc_Rel(MemberGA)" onmouseover="LS_Tip_New(13,0,4)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Tai-chinh-nha-nuoc/Nghi-dinh-25-2017-ND-CP-bao-cao-tai-chinh-nha-nuoc-321445.aspx?tab=3">Lược đồ</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,3)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Liên quan hiệu lực</a>
                        |
                        <a onclick="Doc_DL(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Tai-chinh-nha-nuoc/Nghi-dinh-25-2017-ND-CP-bao-cao-tai-chinh-nha-nuoc-321445.aspx?tab=7">Tải về</a>
                        
                        
                    </p>
                    
                </div>
                <p></p>
            </div>
            <div class="right-col">
                <p>
                    <span style="color: #000">Ban hành:</span>
                    14/03/2017</p>
                <p><span style="color:#000">Hiệu lực:</span> <span style="color:#8C0945"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p><span style="color:#000">Tình trạng:</span> <span class="text-red"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p>
                    <span style="color: #000">Cập nhật:
                        15/03/2017</span></p>
            </div>
        </div>
    
        <div class="content-0">
            <div class="left-col">
                <div class="number">
                    5</div>
                <div class="nq">
                    <p class="nqTitle" lawid="342492">
                        <a onclick="Doc_CT(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Thuong-mai/Chi-thi-02-CT-BCT-tang-cuong-quan-ly-an-toan-thuc-pham-doi-voi-san-xuat-kinh-doanh-ruou-2017-342492.aspx">Chỉ thị 02/CT-BCT năm 2017 về tăng cường quản lý an toàn thực phẩm đối với sản xuất, kinh doanh rượu do Bộ Công thương ban hành</a>
                    </p>
                    <p class="links-bot">
                        <a onmouseover="LS_Tip_New(13,0,1)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Tiếng Anh</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,2)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Văn bản gốc</a>
                        |
                        <a onclick="Doc_Rel(MemberGA)" onmouseover="LS_Tip_New(13,0,4)" onmouseout="hideddrivetip();" href="http://thuvienphapluat.vn/van-ban/Thuong-mai/Chi-thi-02-CT-BCT-tang-cuong-quan-ly-an-toan-thuc-pham-doi-voi-san-xuat-kinh-doanh-ruou-2017-342492.aspx?tab=3">Lược đồ</a>
                        |
                        <a onmouseover="LS_Tip_New(13,0,3)" onmouseout="hideddrivetip();" style="color:#AFAFAF;">Liên quan hiệu lực</a>
                        |
                        <a onclick="Doc_DL(MemberGA)" href="http://thuvienphapluat.vn/van-ban/Thuong-mai/Chi-thi-02-CT-BCT-tang-cuong-quan-ly-an-toan-thuc-pham-doi-voi-san-xuat-kinh-doanh-ruou-2017-342492.aspx?tab=7">Tải về</a>
                        
                        
                    </p>
                    
                </div>
                <p></p>
            </div>
            <div class="right-col">
                <p>
                    <span style="color: #000">Ban hành:</span>
                    14/03/2017</p>
                <p><span style="color:#000">Hiệu lực:</span> <span style="color:#8C0945"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p><span style="color:#000">Tình trạng:</span> <span class="text-red"><span id="span_a" onmouseover="LS_Tip_New(13,0,0)" onmouseout="hideddrivetip()">Đã biết</span></span></p>
                <p>
                    <span style="color: #000">Cập nhật:
                        15/03/2017</span></p>
            </div>
        </div>
    

                        <p>
                            <a class="details" href="/van-ban-moi">Xem tiếp »</a>
                        </p>
                    </div>

但是当我使用beautifulsoup时:

from bs4 import BeautifulSoup as Bsa
import requests
url="http://thuvienphapluat.vn"
page_text=requests.get(url).text
soup =Bsa(page_text,"html.parser")
print soup.prettify()

vbpl=soup.select('#VBPLMOI')
for itext in vbpl:
    print itext.prettify()

它只是给出第一个结果。

<div id="VBPLMOI">
 <div class="content-0">
  <div class="left-col">
   <div class="number">
    1
   </div>
   <div class="nq">
    <p class="nqTitle" lawid="342641">
     <a href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx" onclick="Doc_CT(MemberGA)">
      Thông tư 06/2017/TT-BGDĐT Quy chế đào tạo vừa làm vừa học trình độ đại học do Bộ trưởng Bộ Giáo dục và Đào tạo ban hành
     </a>
    </p>
    <p class="links-bot">
     <a onmouseout="hideddrivetip();" onmouseover="LS_Tip_New(13,0,1)" style="color:#AFAFAF;">
      Tiếng Anh
     </a>
     |
     <a onmouseout="hideddrivetip();" onmouseover="LS_Tip_New(13,0,2)" style="color:#AFAFAF;">
      Văn bản gốc
     </a>
     |
     <a href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx?tab=3" onclick="Doc_Rel(MemberGA)" onmouseout="hideddrivetip();" onmouseover="LS_Tip_New(13,0,4)">
      Lược đồ
     </a>
     |
     <a href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx?tab=4" onclick="Doc_ST(MemberGA)" onmouseout="hideddrivetip();" onmouseover="LS_Tip_New(13,0,3)">
      Liên quan hiệu lực
     </a>
     |
     <a href="http://thuvienphapluat.vn/van-ban/Giao-duc/Thong-tu-06-2017-TT-BGDDT-Quy-che-dao-tao-vua-lam-vua-hoc-trinh-do-dai-hoc-342641.aspx?tab=7" onclick="Doc_DL(MemberGA)">
      Tải về
     </a>
    </p>
   </div>
  </div>
 </div>
</div>

请帮助我获得所有结果。

谢谢和最好的问候。

【问题讨论】:

  • id 应该是唯一的,但您可以尝试.select('[id=VBPLMOI]').find_all(id='VBPLMOI')
  • 您使用的是哪个 Python 版本?根据BS doc,这些解析器在不同的 Python 版本上表现不同。
  • 我按照您所说的进行了尝试,但我在控制台中只得到了一个 div 元素。 ibb.co/mAGaYv
  • @saurabhbaid 抱歉我遗漏了一点,我更新了 $$('#VBPLMOI')[0]。它包含 5 个 div 标签
  • @saurabhbaid: ibb.co/cgovka

标签: python beautifulsoup python-requests


【解决方案1】:

我相信它与请求返回的对象如何被beautifulsoup解析有关。如果您查看来自 print soup.prettify() 的输出,看起来 id='VBPLMOI' 的 div 在第一个结果之后关闭。当我尝试使用 selenium webdriver 检索页面时,我能够获取所有 5 个 div。

from bs4 import BeautifulSoup
import selenium.webdriver as webdriver
url="http://thuvienphapluat.vn"
driver = webdriver.Firefox()
driver.get(url)
soup=BeautifulSoup(driver.page_source,'html.parser')
vbpl=soup.select('#VBPLMOI')
driver.quit()
for itext in vbpl:
    print itext.prettify()

【讨论】:

  • 我得到了错误:“selenium.common.exceptions.WebDriverException: Message: 'geckodriver' 可执行文件需要在 PATH 中。”
  • 为什么需要使用webdriver? request moduve 足以获取源代码。
  • 要使用 Firefox webdriver,必须安装 geckodriver,并添加其 .exe 的路径。这是最近对 bs4 的更改。
  • 我发现一个有趣的事情,当我先保存这个url的页面,然后打开这个本地html,我的选择是正确的。 get from requests 出了点问题。
  • @saurabhbaid 在这种情况下,bs4 如何解析请求模块中的对象似乎存在一些问题。有了上面的回答,我仍然只能得到第一个 div 作为输出,而不是全部 5 个。
【解决方案2】:

我认为问题出在解析器上。我建议使用 html5lib 解析器。 以下代码有效。

from bs4 import BeautifulSoup as Bsa
import requests
url="http://thuvienphapluat.vn"
page_text=requests.get(url).text
soup =Bsa(page_text,"html5lib")
vbpl=soup.select('#VBPLMOI')
for itext in vbpl:
    print itext.prettify(encoding='utf-8')  

这里显示了解析器的快速比较 https://www.crummy.com/software/BeautifulSoup/bs4/doc/

【讨论】:

  • 我试过你的解决方案,它仍然得到i.stack.imgur.com/6gie2.jpg第一行的4个div标签。您可以看到 vbpl[0] 和 vbpl[1] 的比较:ibb.co/dvL3ov。我想要的不对。
    的值始终为 1。
  • 我的错我还没有测试我之前的答案,实际问题出在解析器上。我已经更新了我的答案并对其进行了测试。
猜你喜欢
相关资源
最近更新 更多
热门标签