2017-10-12 2 views
0

J'essaie de gratter les URL du site Web au format html. J'utilise une belle soupe. Voici une partie du code HTML.Python Belle soupe pour gratter les URL à partir d'une page Web

      <li style="display: block;"> 
           <article itemscope itemtype="http://schema.org/Article"> 
            <div class="col-md-3 col-sm-3 col-xs-12" > 
             <a href="/stroke?p=3083" class="article-image"> 
              <img itemprop="image" src="/FileUploads/Post/3083.jpg?w=300&h=160&mode=crop" alt="Banana" title="Good for health"> 
             </a> 
            </div> 

            <div class="col-md-9 col-sm-9 col-xs-12"> 
             <div class="article-content"> 

               <a href="/stroke"> 
                <img src="/assets/home/v2016/img/icon/stroke.png" style="float:left;margin-right:5px;width: 4%;"> 
               </a> 
              <a href="/stroke?p=3083" class="article-title"> 
               <div> 
                <h4 itemprop="name" id="playground"> 
Banana Good for health               </h4> 
               </div> 
              </a> 
              <div>            
               <div class="clear"></div> 
               <span itemprop="dateCreated" style="font-size:10pt;color:#777;"> 
                <i class="fa fa-clock-o" aria-hidden="true"></i> 
09/10              </span> 
              </div> 
              <p itemprop="description" class="hidden-phone"> 
               <a href="/stroke?p=3083"> 
                I love Banana. 
               </a> 
              </p> 
             </div> 
            </div> 
           </article> 
          </li> 

Mon code:

from bs4 import BeautifulSoup 
re=requests.get('http://xxxxxx') 
bs=BeautifulSoup(re.text.encode('utf-8'), "html.parser") 
for link in bs.find_all('a') : 
    if link.has_attr('href'): 
     print (link.attrs['href']) 

Le résultat affiche toutes les urls de cette page, mais ce n'est pas ce que je cherche, je veux seulement un particulier comme «/accident vasculaire cérébral? p = 3083 "dans cet exemple comment puis-je définir la condition en python? (Je sais qu'il y a trois "/ stroke? P = 3083", mais j'en ai juste besoin)

Une autre question. Cette URL n'est pas complète, je dois les combiner avec "http://www.abcde.com" donc le résultat sera "http://www.abcde.com/stroke?p=3083". Je sais que je peux utiliser coller dans R, mais comment faire cela en Python? Merci d'avance! :)

Répondre

2

Il suffit de mettre un lien dans il le grattoir remplaçant some_link et lui donner un coup. Je suppose que vous aurez votre lien désiré avec sa forme complète.

import requests 
from bs4 import BeautifulSoup 
from urllib.parse import urljoin 

res = requests.get(some_link).text 
soup = BeautifulSoup(res,"lxml") 
for item in soup.select(".article-image"): 
    print(urljoin(some_link,item['href'])) 
0

Une autre question. Cette URL n'est pas complète, je dois les combiner avec "http://www.abcde.com" de sorte que le résultat sera "http://www.abcde.com/stroke?p=3083". Je sais que je peux utiliser coller dans R, mais comment faire cela en Python? Merci d'avance! :)

link = 'http://abcde.com' + link 
0

Vous obtenez la plus grande partie déjà droit. Recueillir les liens comme suit (juste une version de compréhension de la liste de ce que vous faites déjà)

urls = [url for url in bs.findall('a') if url.has_attr('href')]

Cela vous donnera les urls. Pour obtenir l'un d'eux, et l'ajouter à l'url ABCDE vous pouvez simplement faire ce qui suit:

if urls: 
    new_url = 'http://www.abcde.com{}'.format(urls[0])