2017-08-11 112 views
0

我目前使用BeautifulSoup从网站中提取以下内容。 但我很努力打印提取我需要的数据。在美丽的汤蟒Python打印列表项目

我期待提取每个列表条目:

所述的数据数量值和HREF =“#”> 4的值。因此,例如在第一个列表条目中,我试图提取href = 4和data-qty = 1.000。

我正在使用的代码在数据下列出。

<div class="content size-options size_us-options" data-sizegroup="size_us" style="display:none"> 
    <ul class="sizes small-block-grid-4"> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="24" data-price="0" data-qty="1.0000" data-qtymad="0.0000" data-qtybcn="1.0000" data-oblocators="BBAI-0B-05-05" href="#">4</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="172" data-price="0" data-qty="4.0000" data-qtymad="0.0000" data-qtybcn="2.0000" data-oblocators="BBAI-0B-05-05" href="#">4.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="22" data-price="0" data-qty="10.0000" data-qtymad="0.0000" data-qtybcn="2.0000" data-oblocators="BBAI-0B-07-05" href="#">5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="160" data-price="0" data-qty="10.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-07-05" href="#">5.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="20" data-price="0" data-qty="9.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-05-05" href="#">6</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="165" data-price="0" data-qty="11.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-05-05" href="#">6.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="18" data-price="0" data-qty="28.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-05-05" href="#">7</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="110" data-price="0" data-qty="41.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-05-05" href="#">7.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="16" data-price="0" data-qty="53.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-05-05" href="#">8</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="121" data-price="0" data-qty="68.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-06-02;BBAI-0B-05-05" href="#">8.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="14" data-price="0" data-qty="85.0000" data-qtymad="0.0000" data-qtybcn="4.0000" data-oblocators="BBAI-0B-07-05" href="#">9</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="114" data-price="0" data-qty="64.0000" data-qtymad="0.0000" data-qtybcn="4.0000" data-oblocators="BBAI-0B-07-05" href="#">9.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="12" data-price="0" data-qty="71.0000" data-qtymad="0.0000" data-qtybcn="4.0000" data-oblocators="BBAI-0B-07-05" href="#">10</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="105" data-price="0" data-qty="59.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-07-05" href="#">10.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="10" data-price="0" data-qty="61.0000" data-qtymad="0.0000" data-qtybcn="3.0000" data-oblocators="BBAI-0B-07-05" href="#">11</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="117" data-price="0" data-qty="39.0000" data-qtymad="0.0000" data-qtybcn="2.0000" data-oblocators="BBAI-0B-07-05" href="#">11.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="8" data-price="0" data-qty="39.0000" data-qtymad="0.0000" data-qtybcn="2.0000" data-oblocators="BBAI-0B-07-05" href="#">12</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="202" data-price="0" data-qty="25.0000" data-qtymad="0.0000" data-qtybcn="0.0000" data-oblocators="" href="#">12.5</a> 
     </li> 
     <li> 
      <a rel="nofollow" class="size-button available" data-optionIndex="126" data-price="0" data-qty="26.0000" data-qtymad="0.0000" data-qtybcn="0.0000" data-oblocators="" href="#">13</a> 
     </li> 
    </ul> 
</div> 

这是我正在使用的代码,我正在努力提取和打印我需要的数据,并将感谢任何帮助!

soup = BeautifulSoup(response.content, 'html.parser') 
ukattributes = soup.find('div', {'class':'content size-options 
size_uk-options'}) 
print ukattributes 
sizes = ukattributes.findAll('li') 
print sizes 
    for size in sizes: 
    response = s.get(size.find('a')['href']) 
    soup = BeautifulSoup(response.content, 'html.parser') 
    print size 

请让我知道,如果你能帮助我,因为我一直在尝试一段时间!再次感谢

+0

的HTML是不完整的,我们可以拥有所有的开闭格或UI元素的来源? –

+0

@ Dan-Dev我加了直到关闭Div再次感谢 – Larsson

回答

1

您不能在URL上发出GET请求,因为它不会发送到服务器,它可能被页面上的JavaScript使用,或者只是链接到同一页面。有关更多详细信息,请参阅我对Pagination giving the first page in every iteration的回答。 所以:

response = s.get(size.find('a')['href']) 

将无法​​按预期工作。为了让您请求的数据尝试:

soup = BeautifulSoup(response.content, 'html.parser') 
ukattributes = soup.find('div', {'class':'content size-options size_us-options'}) 
print (ukattributes) 
sizes = ukattributes.findAll('li') 
print (sizes) 
for size in sizes: 
    href = size.find('a',href=True) 
    print (href.text) 
    print (href["data-qty"]) 

输出:

4 
1.0000 
4.5 
4.0000 
5 
10.0000 
5.5 
10.0000 
+0

非常感谢! @丹 - 德这正是我正在寻找的 – Larsson

1

您可以使用简单的列表理解来选择您需要的数据。

ukattributes = soup.find('div', {'class':'content size-options size_us-options'}) 
data = [ [a.text, a.get('data-qty')] for a in ukattributes.find_all('a') ] 
+0

非常感谢,这对我学习python非常有帮助! – Larsson

+0

我很高兴听到那个男人。列表理解是一个非常方便的功能。 –

+0

你知道这个有什么好的解读,这样我可以更熟悉吗? – Larsson