2017-10-10 19 views
0

私はWebcrawlerを書くのに초급です。 http://www.creditchina.gov.cn/search_all#keyword=&searchtype=0&templateId=&creditType=&areas=&objectType=2&page=1の検索エンジンを使用して、自分の入力が有効かどうかをチェックします。BeautifulSoupはタグの間に何も得られません

たとえば、912101127157655762は有効な入力で、912101127157655760は無効です。

開発ツールからウェブのソースコードを見た後、私が見つかりました。入力が無効な番号である場合、タグは次のようになり、ということ: enter image description here

入力が有効である場合、タグは次のようになりますが:

enter image description here 「ul class = "credit-info-results-public-results-left item-template"タグ内に何かがあるかどうかを確認するだけで、入力が有効かどうかを判断したいと思います。私のウェブクローラの記述方法は次のとおりです。

import urllib 
from bs4 import BeautifulSoup 
url = 'http://www.creditchina.gov.cn/search_all#keyword=912101127157655762&searchtype=0& 
templateId=&creditType=&areas=&objectType=2&page=1' 
req = urllib.request.Request(url) 
data = urllib.request.urlopen(req) 
bs = data.read().decode('utf-8') 
soup = BeautifulSoup(bs, 'lxml') 
check = soup.find_all("ul", {"class": "credit-info-results public-results-left item-template"}) 
if check == []: 
    # TODO 
if check != []: 
    # TODO 

ただし、checkの値は常に[]です。私はタブの間に何もない理由を理解できません。誰かが私が問題を解決するのを助けてくれることを望みます。

答えて

0

あなたはhtmlではなくJSオブジェクトをレスポンスとして持っています。それがBSがそれを解析できない理由です。

部分文字列検索を使用して、応答に何かが含まれているかどうかを確認できます。

import urllib 
from bs4 import BeautifulSoup 
url = 'http://www.creditchina.gov.cn/search_all#keyword=912101127157655762&searchtype=0& 
templateId=&creditType=&areas=&objectType=2&page=1' 
req = urllib.request.Request(url) 
data = urllib.request.urlopen(req) 
bs = data.read().decode('utf-8') 

ul_pos = bs.find('credit-info-results public-results-left item-template') 
if ul_pos <> 0: 
    bs = bs[ul_pos:] 

soup = BeautifulSoup(bs, 'lxml') 
check = soup.find_all("ul", {"class": "credit-info-results public-results-left item-template"}) 
if check == []: 
    # TODO 
if check != []: 
    # TODO 
+0

JSオブジェクトではなくhtmlを取得したかどうかはどのようにわかりますか?また、bs.find( 'credit-info-results public-results-left item-template')の値が39202で、入力912101127157655762と912101127157655760の両方が異なる出力値を返すはずであることを確認しました。それは混乱しています... –

+0

私は私の答えを更新しました、試してみてください。残念ながら、このサイトでは私のリクエストが禁止されているため、自分でテストすることはできません。 –

+0

私はWebのテンプレートに過ぎないことを発見しました。そして、私は開発者ツールの要素の代わりにネットワークを見る必要があります。とにかくあなたの時間と忍耐をありがとう! –