【问题标题】:python scraping date from html page (June 10, 2017)python从html页面抓取日期(2017年6月10日)
【发布时间】:2017-06-13 19:31:10
【问题描述】:

如何从具有下表数据的 html 页面中提取日期“2017 年 6 月 3 日”。日期将根据订单号更改。我不确定我是否正确使用它。请指教。

<tr>
   <td style="font:bold 24px Arial;">Order #12345</td>
    <td style="font:13px Arial;"><strong>Order Date:</strong> June 03, 2017</td>
</tr>

下面是我写的示例代码

import requests
from bs4 import BeautifulSoup

#'url' is the actual link of html page
data = requests.get('url').content
soup = BeautifulSoup(data, "html.parser")

on = soup.find_all(text=re.compile("Order #"))
print (on)

od = soup.find_all(text=re.compile("Order Date")).next_element()
print (od)

执行上述代码后出现以下错误。

Error :
['Order #12345']
Traceback (most recent call last):
  File "test.py", line 24, in <module>
    od = soup.find_all(text=re.compile("Order Date")).next_element()
AttributeError: 'ResultSet' object has no attribute 'next_element'

【问题讨论】:

  • 您正在尝试调用结果对象列表中的下一个元素,您是否尝试过遍历列表并在每个项目上调用下一个元素?

标签: python beautifulsoup screen-scraping


【解决方案1】:

如果您尝试解析的页面上还有其他表格,这可能并不理想。如果只有一张桌子,这应该可以。

编辑:添加了如何从字符串中解析实际日期的示例

In[19]: from datetime import datetime
   ...: 
   ...: from bs4 import BeautifulSoup
   ...: 
   ...: html = '''\
   ...: <tr>
   ...:    <td style="font:bold 24px Arial;">Order #12345</td>
   ...:     <td style="font:13px Arial;"><strong>Order Date:</strong> June 03, 2017</td>
   ...: </tr>
   ...: '''
   ...: soup = BeautifulSoup(html, 'lxml')
   ...: 
   ...: for row in soup.find_all('tr'):
   ...:     order_number, order_date = row.find_all('td')
   ...:     print(order_number.text)
   ...:     print(order_date.text)
   ...:     d = datetime.strptime(order_date.text, 'Order Date: %B %d, %Y')
   ...:     print(d.year, d.month, d.day)
   ...: 
Order #12345
Order Date: June 03, 2017
2017 6 3

【讨论】:

    【解决方案2】:

    或者,

    >>> import requests
    >>> import bs4
    >>> soup = bs4.BeautifulSoup('''\
    ... <tr>
    ...     <td style="font:bold 24px Arial;">Order #12345</td>
    ...     <td style="font:13px Arial;"><strong>Order Date:</strong> June 03, 2017</td>
    ... </tr>''', 'lxml')
    >>> soup.find_all(text=bs4.re.compile("Order #"))[0][7:]
    '12345'
    >>> soup.find_all(text=bs4.re.compile("Order Date:"))[0].parent.next.next.strip()
    'June 03, 2017'
    

    不需要单独importre,因为它包含在bs4中。我跟着你做的;也就是说,我查找了文本,然后从那里导航。

    【讨论】:

      猜你喜欢
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多