2017-10-12 1 views
0

Ich versuche, URLs von der HTML-Format-Website zu kratzen. Ich benutze eine schöne Suppe. Hier ist ein Teil des HTML.Python Schöne Suppe, um URLs von einer Webseite zu kratzen

      <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> 

Mein 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']) 

Das Ergebnis wird alle URLs auf dieser Seite ausdrucken, aber das ist nicht das, was ich suche, ich möchte nur ein bestimmtes wie „/ Hub? p = 3083 "Wie kann ich in diesem Beispiel die Bedingung in Python setzen? (Ich weiß, es gibt total drei "/ Strich? P = 3083" in diesem, aber ich brauche nur einen)

Eine andere Frage. Diese URL ist nicht vollständig, ich muss sie mit "http://www.abcde.com" kombinieren, so dass das Ergebnis "http://www.abcde.com/stroke?p=3083" sein wird. Ich weiß, dass ich Paste in R verwenden kann, aber wie macht man das in Python? Danke im Voraus! :)

Antwort

2

Setzen Sie einfach ein Link in dem Abstreifer ersetzen some_link und probieren Sie es aus. Ich nehme an, Sie werden Ihren gewünschten Link zusammen mit seiner vollen Form haben.

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

Eine andere Frage. Diese URL ist nicht vollständig, ich muss sie mit mit "http://www.abcde.com" kombinieren, so dass das Ergebnis "http://www.abcde.com/stroke?p=3083" wird. Ich weiß, ich kann einfügen in R, aber , wie dies in Python zu tun? Danke im Voraus! :)

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

Sie sind die meisten davon bekommen Recht bereits. Sammeln Sie die Links wie folgt (nur eine Liste Verständnis Version von dem, was Sie tun bereits)

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

Dies gibt Ihnen die URLs. Einer von ihnen zu bekommen, und hängen Sie ihn an die ABCDE-URL können Sie einfach folgendes tun:

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