【问题标题】:beautifulsoup for looping and getting text and HrefBeautifulsoup 用于循环和获取文本和 Href
【发布时间】:2018-07-29 17:05:05
【问题描述】:

我在这里有点紧张:

它是一个非常混乱的 ASP 网站,我试图从中获取数据:

我正在尝试使用for 循环来获取href 以及网站上第 4 个表的所有行的文本,所以我首先这样做了:

table = soup.findAll('table')[3]

然后我需要从这个表中获取<tr> 标记内的所有文本以及<a> 内的href

我试过这样的:

for product in table.findAll('tbody'):
  product_title = product.find('tr').text
  product_link = product.find('a')['href']
  print (product_title, product_link)

但我没有得到任何回报

我正在处理的表:

    <tr bgcolor="#EFEFEF">
  <td>
   <a href="free.asp?detail=hide&amp;c_id=4342141">
    <img align="absmiddle" border="0" hspace="0" src="pic/bullet.gif" vspace="0"/>
   </a>
  </td>
  <td>
   4342141
  </td>
  <td width="10">
  </td>
  <td>
   25.07.2018 09:00
  </td>
  <td width="10">
  </td>
  <td>
   Ankara
  </td>
  <td width="10">
   -
  </td>
  <td>
   Konya
  </td>
  <td colspan="2">
  </td>
 </tr>
 <tr bgcolor="#EFEFEF" height="3">
  <td colspan="10">
  </td>
 </tr>
 <tr bgcolor="#FFFFFF" height="1">
  <td colspan="10">
  </td>
 </tr>
 <tr bgcolor="#DDDDDD" height="6">
  <td colspan="10">
  </td>
 </tr>
 <tr bgcolor="#FFFFFF" height="1">
  <td colspan="10">
  </td>
 </tr>
 <tr bgcolor="#DEE3E7" height="3">
  <td colspan="10">
  </td>
 </tr>
 <tr bgcolor="#DEE3E7">
  <td>
   <a href="free.asp?detail=hide&amp;c_id=4134123">
    <img align="absmiddle" border="0" hspace="0" src="pic/bullet.gif" vspace="0"/>
   </a>
  </td>
  <td>
   4134123
  </td>
  <td width="10">
  </td>
  <td>
   26.07.2018 09:00
  </td>
  <td width="10">
  </td>
  <td>
   Van
  </td>
  <td width="10">
   -
  </td>
  <td>
   Istanbul
  </td>
  <td colspan="2">
  </td>
 </tr>

【问题讨论】:

  • 你能出示product的打印件吗?
  • 您的 HTML 文档是什么样的?
  • 请编辑您的问题,如果没有示例 HTML/URL,我们在这里无法为您提供太多帮助。
  • 你错过了for循环块中的缩进。
  • 表格中有“tbody”元素吗?您的 HTML 中缺少它。没有它,您的代码将不会打印任何内容。

标签: python-3.x beautifulsoup python-requests lxml


【解决方案1】:

可以直接获取所有的tr标签,而不是从table中提取tbody中的文本。 根据您的 sn-p,您可以参考此代码 sn-p 从表中提取数据。

soup = BeautifulSoup(text, 'html.parser')
all_products = []
for tr in soup.find_all('tr'):
    text = tr.get_text(separator=' ', strip=True)
    if text:
        a_tag = tr.find('a')
        if a_tag:
            product_link = a_tag.attrs['href']
            all_text = text + ' ' + product_link
            all_products.append(all_text.split(' '))

print(all_products)

输出是:

[['4342141', '25.07.2018', '09:00', 'Ankara', '-', 'Konya', 'free.asp?detail=hide&c_id=4342141'], ['4134123' , '26.07.2018', '09:00', 'Van', '-', '伊斯坦布尔', 'free.asp?detail=hide&c_id=4134123']]

【讨论】:

  • 我得到的输出是:文件“C:\Users\yasir\Documents\Web Scraping\araba.py”,第 41 行,在 product_link = a_tag.attrs['href'] AttributeError: 'NoneType' 对象没有属性 'attrs' [1.8s 完成]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 2021-11-19
  • 2020-03-11
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多