Arrastrándose bajo el atributo href de una etiqueta de todas las páginas del sitio web

Al escribir las páginas que se arrastran una etiqueta bajo el atributo href, cuando hay un problema de este tipo, si no hay atributo href se produce este error bajo una etiqueta, como sigue:

 

Baidu tiene un maestro con un partido regular, no cómo el método buena sensación, compruebe el documento oficial BeautifulSoup encontró una manera buena, como se muestra a continuación:

El documento oficial de enlace: https: //beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

El has_attr () Este método se puede determinar si existe una propiedad de una etiqueta, si está presente, devuelve True 

 

solución:

Para el uso estético de funciones anónimas

 

soup_a = soup.find_all (tag lambda: tag.has_attr ( 'href'))

 

 

 

El código final:

  1  # / usr / bin / env python! 
  2  # - * - codificación: utf-8 - * - 
  3  # Autor: Riy 
  4  
  5  importación tiempo
   6  de importación solicitudes
   7  importación sys
   8  importación de registro
   9  de BS4 importación BeautifulSoup
 10  de peticiones. excepciones importar RequestException
 11  de multiprocesamiento importación Proceso, piscina
 12  
13  
14  logging.basicConfig (
 15     nivel = logging.DEBUG,
 16      format = ' % (levelname) -10S:% (mensaje) s ' ,
 17  )
 18  
19  
20  clase down_url:
 21      def descarga (self, url):
 22          ''' 爬取url '' ' 
23          try :
 24              start = time.time ()
 25              logging.debug ( ' iniciar descarga url ... " )
 el 26              de respuesta = requests.get (url)
 27              page = response.content
28              sopa = BeautifulSoup (página, ' lxml ' )
 29              soup_a = soup.find_all ( lambda etiqueta: tag.has_attr ( ' href ' ))
 30              soup_a_href_list = []
 31              # de impresión (soup_a) 
32              para k en soup_a:
 33                  # de impresión (k) 
34                  soup_a_href = k [ ' href ' ]
 35                  si soup_a_href.find ( ' ' ):
 36 #                     impresión (soup_a_href) 
37                      soup_a_href_list.append (soup_a_href)
 38              de impresión (f ' 运行了{time.time () - inicio}秒' )
 39          , excepto RecursionError como e:
 40              de impresión (e)
 41          de retorno soup_a_href_list
 42  
43  
44      def escritura ( soup_a_href_list, txt):
 45          '' ' 下载到txt文件''' 
46          logging.debug ( ' a partir de escritura txt ... ' )
 47          con txt abierto (, ' un ' , encoding =' UTF-8. ' ) Como F:
 48              para que en soup_a_href_list:
 49                  f.writelines (F ' {I} \ n ' )
 50          Imprimir (F ' archivo TXT generado} { ' )
 51 es  
52 es  
53 es      DEF help_memo (Ser) :
 54          '' ' Ver ayuda ' '' 
55          Imprimir ( '' ' 
56 es          -H o ayuda cheque --help
 57 es          -u o --url Añadir URL
 58          archivo txt -t está escrito o --txt
 59          ' '')
 60 
61 es  
62 es      DEF disponibles para su compra (Ser):
 63 es          '' ' página de bienvenida ' '' 
64          desc = ( ' Bienvenido arrastrándose guión url ' .center (30, ' * ' ))
 65          Imprimir (desc)
 66  
67  
68  DEF principal ( ):
 69      '' ' función principal ' '' 
70      . P = la piscina (3 )
 71 es      P_LIST = []
 72      TEMP = down_url ()
 73 es      logging.debug ( ' A partir Python ... RUN ')
 74     probar :
 75          si len (sys.argv) == 1 :
 76              temp.welcome ()
 77              temp.help_memo ()
 78          elif sys.argv [1] en { ' -h ' , ' --help ' }:
 79              temp .help_memo ()
 80          elif sys.argv [1] en { ' -u ' , ' --url ' } y sys.argv [3] en { ' -t ' , '--txt ' }:
 81              a = temp.download (sys.argv [2 ])
 82              temp.write (a, sys.argv [4 ])
 83          elif sys.argv [1] en { ' -t ' ' --txt ' }:
 84              de impresión ( ' 请先输入url! ' )
 85          elif sys.argv [1] en { ' -u ' ' --url ' }:
 86              url_list = sys.argv [2 :]
 87              impresión(url_list)
 88              para i en url_list:
 89                  a = p.apply_async (temp.download, args = (i,))
 90                  p_list.append (a)
 91              por p en p_list:
 92                  de impresión (p.get ())
 93          otra cosa :
 94              temp.help_memo ()
 95  
96              print ( ' 输入的参数有误! ' )
 97      , salvo excepciones como el correo:
 98          de impresión (e)
 99          temp.help_memo ()
 100  
101 
102  si  __name__ == ' __main__ ' :
 103      main ()
Ver código

 

Supongo que te gusta

Origin www.cnblogs.com/riyir/p/12460042.html
Recomendado
Clasificación