2016-09-02 4 views
2

Ich versuche, HTML-Inhalt von der Website analysieren, ändern Sie eine href und img src. Eine href wurde erfolgreich geändert, aber img src nicht.Python BeautifulSoup ersetzen img src

Es variabel verändert, aber nicht in HTML (POST_CONTENT):

<p><img alt="alt text" src="https://lifehacker.ru/wp-content/uploads/2016/08/15120903sa_d2__1471520915-630x523.jpg" title="Title"/></p> 

Nicht _http: //site.ru ...

<p><img alt="alt text" src="http://site.ru/wp-content/uploads/2016/08/15120903sa_d2__1471520915-630x523.jpg" title="Title"/></p> 

Mein Code

if "app-store" not in url: 
     r = requests.get("https://lifehacker.ru/2016/08/23/kak-vybrat-trimmer/") 
     soup = BeautifulSoup(r.content) 

     post_content = soup.find("div", {"class", "post-content"}) 
     for tag in post_content(): 
      for attribute in ["class", "id", "style", "height", "width", "sizes"]: 
       del tag[attribute] 

     for a in post_content.find_all('a'): 
      a['href'] = a['href'].replace("https://lifehacker.ru", "http://site.ru") 

     for img in post_content.find_all('img'): 
      img_urls = img['src'] 
      if "https:" not in img_urls: 
       img_urls="http:{}".format(img_urls) 
      thumb_url = img_urls.split('/') 
      urllib.urlretrieve(img_urls, "/Users/kr/PycharmProjects/education_py/{}/{}".format(folder_name, thumb_url[-1])) 

      file_url = "/Users/kr/PycharmProjects/education_py/{}/{}".format(folder_name, thumb_url[-1]) 
      data = { 
       'name': '{}'.format(thumb_url[-1]), 
       'type': 'image/jpeg', 
      } 

      with open(file_url, 'rb') as img: 
       data['bits'] = xmlrpc_client.Binary(img.read()) 


      response = client.call(media.UploadFile(data)) 

      attachment_url = response['url'] 


      img_urls = img_urls.replace(img_urls, attachment_url) 



     [s.extract() for s in post_content('script')] 
     post_content_insert = bleach.clean(post_content) 
     post_content_insert = post_content_insert.replace('&lt;', '<') 
     post_content_insert = post_content_insert.replace('&gt;', '>') 

     print post_content_insert 

Antwort

1

Sieht so aus, als ob Sie nie img_urls zurück zu img['src'] zuweisen. Versuche das am Ende des Blocks.

img_urls = img_urls.replace(img_urls, attachment_url) 
img['src'] = img_urls 

... Aber zuerst müssen Sie Ihre with Anweisung ändern, damit es etwas anderen Namen als img für Ihre Datei-Objekt verwendet. Im Moment überschatten Sie das dom-Element und Sie können nicht mehr darauf zugreifen.

 with open(file_url, 'rb') as some_file: 
      data['bits'] = xmlrpc_client.Binary(some_file.read()) 
+0

bereits versucht, aber - img [ 'src'] = img_urls Typeerror: 'Datei' Objekt nicht Gegenstand Zuordnung –

+0

Oh nicht unterstützt, es ist ein Name Kollision Problem. Bearbeitet. – Kevin

+0

Arbeiten - perfekt, vielen Dank und Entschuldigung für Noob Fragen. –