2017-04-21 3 views
0

Je veux écrire une araignée pour explorer un html. J'utilise requests et beautifulsoup, mais je viens de découvrir que beautifulsoup ne peut pas analyser toute la page. Au lieu de cela, Beautifulsoup n'en analyse que la moitié. Voici mon code:Beaultifusoup ne peut pas analyser tout le 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 

et c'est the origin page, qui a row "13107", mais mon araignée a juste la moitié, ma rangée arrête à "13192". Pour tester, je sauvegarde manuellement le fichier html d'origine demandé par requests et je viens de trouver que tout allait bien. Cette erreur est sur Beautifulsoup. Comment puis-je le résoudre? Merci

Répondre

1

Non, il n'y a rien de mal avec BeautifulSoup ici. Vous analysez une seule page sous l'URL http://www.bishefuwu.com/developer/transmit - il ne contient pas la ligne avec le numéro 13107 - c'est sur la deuxième page.

itérer sur tous les urls dans la liste:

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) 

Notez que vous pouvez aussi penser à ne pas hardcoding la liste des urls avance et gérer la pagination dans une analyse de façon plus dynamique le bloc de pagination sur la page et extraire les numéros de page disponibles.

+0

Appréciez beaucoup! – ucag