html页面的python抓取日期(2017年6月10日)
如何从包含下表数据的html页面中提取日期“2017年6月3日”。日期将根据订单号更改。我不确定我是否正确使用了它。请告知html页面的python抓取日期(2017年6月10日),python,beautifulsoup,screen-scraping,Python,Beautifulsoup,Screen Scraping,如何从包含下表数据的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>
<td style="font:bold 24px Arial;">Order #12345</td>
<td style="font:13px Arial;"><strong>Order Date:</strong> June 03, 2017</td>
</tr>
执行上述代码后,我得到以下错误
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'
错误:
[“订单#12345”]
回溯(最近一次呼叫最后一次):
文件“test.py”,第24行,在
od=soup.find_all(text=re.compile(“订单日期”)).next_元素()
AttributeError:'ResultSet'对象没有属性'next\u element'
如果您试图解析页面上的其他表,则这可能不理想。如果只有一个表,这应该可以工作
EDIT:添加了如何从字符串解析实际日期的示例
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
[19]中的:从日期时间导入日期时间
...:
…:从bs4导入BeautifulSoup
...:
…:html=''\
...:
…:订单#12345
…:订单日期:2017年6月3日
...:
...: '''
…:soup=BeautifulSoup(html,“lxml”)
...:
…:对于汤中的行。查找所有('tr'):
…:订单号,订单日期=行。查找所有('td'))
…:打印(订单号.文本)
…:打印(订单日期文本)
…:d=datetime.strtime(order_date.text,'订单日期:%B%d,%Y')
…:打印(d.年、d.月、d.日)
...:
订单号#12345
订单日期:2017年6月3日
2017 6 3
或者
>>> 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'
导入请求
>>>进口bs4
>>>汤=bs4.BeautifulSoup(“”)\
...
…订单#12345
订单日期:2017年6月3日
…“(lxml”)
>>>soup.find_all(text=bs4.re.compile(“Order#”))[0][7:]
'12345'
>>>soup.find_all(text=bs4.re.compile(“订单日期”)[0]。parent.next.next.strip()
‘2017年6月3日’
无需单独导入
重新
,因为它包含在bs4中。我跟随你所做的;也就是说,我查找了文本,然后从那里导航。您试图调用结果对象列表上的下一个元素,您是否尝试过在列表上循环并调用每个项目上的下一个元素?
>>> 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'