2017-06-13 11 views
0

htmlページから、以下のテーブルデータを持つ日付を抽出するにはどうすればよいですか?注文番号ごとに日付が変わります。私はそれを正しく使用しているかどうかはわかりません。お知らせ下さい。以下はhtmlページ(2017年6月10日)からのpythonスクレイピング日付

<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' 
+1

結果オブジェクトのリストで次の要素を呼び出そうとしていますが、リストをループして各要素の次の要素を呼び出してみましたか? –

答えて

0

解析するページに他のテーブルがある場合、これは理想的ではありません。テーブルが1つしかない場合、これは機能するはずです。

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 
0

から実際の日付を解析する方法の追加例、

>>> 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に含めるある別々ようreimportします。私はあなたがしたことに従った。つまり、テキストを探してそこからナビゲートしました。

関連する問題