2016-05-04 6 views
0

私はPythonを学んでいます。そして、私はそれを使って図書の本の可用性をチェックするプロセスを自動化しようとしています。beautifulsoupを使って図書の可用性を確認する

私はbs4、リクエスト、パーティションで実行しようとしました。

これは私がから解析しようとしていますリンクです:[http://catalogue.nlb.gov.sg/cgi-bin/spydus.exe/FULL/EXPNOS/BIBENQ/1592917/156302298,2][1]

私はそのソースコードを表示し、ここでの抜粋です:

<tr> 
    <td valign="top"><a href="/cgi-bin/spydus.exe/ENQ/EXPNOS/GENENQ/1564461?LOCX=BIPL">**Bishan Public Library**</a> 
    <br /> 
    </td> 
    <td valign="top"> 
    <book-location data-title="The opposite of everyone" data-branch="BIPL" data-usagelevel="001" data-coursecode="" data-language="English" data-materialtype="BOOK" data-callnumber="JAC" data-itemcategory="" data-itemstatus="" data-lastreturndate="20160322" 
    data-accession="B31189097E" data-defaultLoc="Adult Lending">Adult Lending</book-location> 
    </td> 
    <td valign="top"><a href="/cgi-bin/spydus.exe/ENQ/EXPNOS/BIBENQ/1564461?CGS=E*English">English</a> 
    <br /><a href="/cgi-bin/spydus.exe/WBT/EXPNOS/BIBENQ/1564461?CNO=JAC&amp;CNO_TYPE=B">JAC</a> 
    <br /> 
    </td> 
    <td valign="top">**Available** 
    <br /> 
    </td> 
</tr> 
<tr> 
    <td valign="top"><a href="/cgi-bin/spydus.exe/ENQ/EXPNOS/GENENQ/1564461?LOCX=BMPL">**Bukit Merah Public Library**</a> 
    <br /> 
    </td> 
    <td valign="top"> 
    <book-location data-title="The opposite of everyone" data-branch="BMPL" data-usagelevel="001" data-coursecode="" data-language="English" data-materialtype="BOOK" data-callnumber="JAC" data-itemcategory="" data-itemstatus="" data-lastreturndate="20160405" 
    data-accession="B31189102C" data-defaultLoc="Adult Lending">Adult Lending</book-location> 
    </td> 
    <td valign="top"><a href="/cgi-bin/spydus.exe/ENQ/EXPNOS/BIBENQ/1564461?CGS=E*English">English</a> 
    <br /><a href="/cgi-bin/spydus.exe/WBT/EXPNOS/BIBENQ/1564461?CNO=JAC&amp;CNO_TYPE=B">JAC</a> 
    <br /> 
    </td> 
    <td valign="top">**Available** 
    <br /> 
    </td> 
</tr> 

私がしようとしています情報解析するのは本が利用できるライブラリです。

は、ここに私がやったことだ:

import requests, bs4 
>>> res = requests.get('http://catalogue.nlb.gov.sg/cgi-bin/spydus.exe/FULL/EXPNOS/BIBENQ/1592917/156302298,2') 
>>> string = bs4.BeautifulSoup(res.text) 

は、その後、私は文字列にをしよう:

>>> str(string) 

そして、それはアウト全体のソースコードを印刷し、ひどく私のIDLEを遅れ!

それが遅れて停止した後、私はこれでした:

>>> keyword = '<a href="/cgi-bin/spydus.exe/ENQ/EXPNOS/GENENQ/1564461?LOCX=' 
>>> string.partition('keyword') Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> 
    string.partition('keyword') TypeError: 'NoneType' object is not callable 

を、それがエラーの原因となった理由を私は知らない、私は右、文字列に文字列を作りましたか?

また、「ライブラリブランチ」の直前で「使用可能」の直後にあるため、このキーワードを使用しました。だから、たとえそれが他の冗長コードを大量に生成したとしても、最初の行でその本が利用できるライブラリブランチを見ることができます。

私はそれが最も効率的な方法ではなかったと確信しています。あなたが正しい方法で私を指すことができれば、私に非常に感謝します!

これは非常に長い投稿ですが、私は可能な限り自分の状況を詳細にしようとしています。私と一緒にお越しいただきありがとうございます。あなたが任意の変数にstr(string)の結果を割り当てていなかったので、

答えて

1

いいえ、あなたは、Pythonの文字列にstringをしなかった、そしてそれゆえに失われる:

>>> type(string) 
<class 'bs4.BeautifulSoup'> 
>>> type(str(string)) 
<type 'str'> 
>>> type(string) 
<class 'bs4.BeautifulSoup'> 

変数stringは変更されません。試してみてください:

>>> string = str(string) 
>>> type(string) 
<type 'str'> 

ここではstr文字列があります。

なぜ、BeautifulSoupを使用してHTMLからデータを抽出しないのですか?それはそれが何のためであり、それが何が良いのかです。ここではそれを行うための一つの方法は次のとおりです。

import requests 
from bs4 import BeautifulSoup 

html = requests.get('http://catalogue.nlb.gov.sg/cgi-bin/spydus.exe/FULL/EXPNOS/BIBENQ/1592917/156302298,2').text 
soup = BeautifulSoup(html) 

holdings = soup.find('table', class_='clsTab1').find_all('tr') 
for holding in holdings: 
    cells = holding.find_all('td') 
    if cells: 
     library = cells[0].text 
     availability = cells[-1].text 
     print('{}: {}'.format(library, availability)) 

出力

 
Ang Mo Kio Public Library: Available 
Bedok Public Library: Available 
Bishan Public Library: Available 
Bukit Merah Public Library: Available 
Central Public Library: Available 
Geylang East Public Library: Available 
Jurong Regional Library: Available 
Jurong West Public Library: Available 
[email protected]: Available 
Marine Parade Public Library: Onloan - Due: 13 May 2016 
Queenstown Public Library: Onloan - Due: 29 May 2016 
Tampines Regional Library: Available 
Toa Payoh Public Library: Available 
Woodlands Regional Library: Available 
関連する問題