2017-04-21 9 views
0

htmlをクロールするスパイダーを作成したいと思います。私はrequestsbeautifulsoupを使用しますが、私はbeautifulsoupがページ全体を解析できないことを知りました。代わりに、Beautifulsoupはちょうどその半分を解析します。ここで が私のコードです:Beaultifusoupがすべてのhtmlを解析できません

import requests 
from bs4 import BeautifulSoup as bs 
urls = ['http://www.bishefuwu.com/developer/transmit','http://www.bishefuwu.com/developer/transmit/index/p/2.html'] 
html = requests.get(urls[0]).content 
soup = bs(html,'lxml') 
table = soup.find('tbody') 
trs = table.find_all('tr') 
for tr in trs: 
    r = tr.find_all('td')[:3] 
    for i in map(lambda x:x.get_text(),r): 
     print i 

と、これはthe origin pageで、行を持って、「13107」 が、私のクモはそれの半分を持って、私の行は「13192」で停止します。 テストのために、私はrequestsで要求された原点htmlを手動で保存しました。このエラーはBeautifulsoupにあります。 どうすれば解決できますか? ありがとう

答えて

1

いいえ、BeautifulSoupに間違いはありません。 http://www.bishefuwu.com/developer/transmit URLの下に単一のページを解析しています - それは番号13107の行を含んでいません - それは第2ページにあります。リスト内のすべてのURLを超える

反復:あなたはまた、事前にURLのリストをハードコーディングないと思うと、上のページネーションブロックを解析し、よりダイナミックな方法で改ページを扱うことができる、ということ

with requests.Session() as session: 
    for url in urls: 
     html = session.get(url).content 

     soup = bs(html, 'lxml') 

     for tr in soup.select("tbody tr"): 
      r = tr.find_all('td')[:3] 
      for i in map(lambda x: x.get_text(), r): 
       print(i) 

注意利用可能なページ番号を抽出します。

+0

多くの点を気に入ってください! – ucag

関連する問題