2017-01-09 13 views
1

私は引用されたウェブページのハイパーリンクとそれが表示している記事のタイトルごとに拾いたい人気記事のウェブページを持っています。BeautifulSoupを利用したリンクタイトルとURLのウェブページのスクラップ

私のスクリプトの出力は、各タイトルと記事の内容を1行に記載したCSVファイルです。したがって、このWebページに50の記事がある場合は、50行と100データ点のファイルが1つ必要です。

私の問題は、記事のタイトルとそのハイパーリンクがSVGコンテナに含まれていることです。私はBeautifulSoupをWebスクレイピングに利用しましたが、各記事のタイトルとハイパーリンクを選択する方法はわかりません。すべての助けは大いに感謝しています。

import requests 
from bs4 import BeautifulSoup 
import re 

res = requests.get('http://fundersandfounders.com/what-internet-thinks-based-on-media/') 
res.raise_for_status() 
playFile = open('top_articles.html', 'wb') 
for chunk in res.iter_content(100000): 
    playFile.write(chunk) 
    f = open('top_articles.html') 
    soup = BeautifulSoup(f, 'html.parser') 
    links = soup.select('p') #i know this is where i'm messing up, but i'm not sure which selector to actually utilize so I'm using the paragraph selector as a place-holder 
    print(links) 

私は、これは実質的に2段階のプロジェクトであることを認識しています:私のスクリプトの現在のバージョンは、実際のコンテンツ私はこすることするつもりだすべてのハイパーリンクのリストを反復しません。それは私が自分で簡単に実行することができる第二のステップですが、誰もがそのビットを書くことを望むなら、あなたに誇りを持ってください。

答えて

1

次の2つのステップでそれを行う必要があります。

  • HTMLを解析し、svg
  • ダウンロードsvgページへのリンクを抽出し、BeautifulSoupでそれを解析し、
「泡」を抽出します

実装:

from urllib.parse import urljoin # Python3 

import requests 
from bs4 import BeautifulSoup 


base_url = 'http://fundersandfounders.com/what-internet-thinks-based-on-media/' 

with requests.Session() as session: 
    # extract the link to svg 
    res = session.get(base_url) 
    soup = BeautifulSoup(res.content, 'html.parser') 
    svg = soup.select_one("object.svg-content") 
    svg_link = urljoin(base_url, svg["data"]) 

    # download and parse svg 
    res = session.get(svg_link) 
    soup = BeautifulSoup(res.content, 'html.parser') 
    for article in soup.select("#bubbles .bgroup"): 
     title, resource = [item.get_text(strip=True, separator=" ") for item in article.select("a text")] 
     print("Title: '%s'; Resource: '%s'." % (title, resource)) 

記事のタイトルとリソースを印刷します。

Title: 'CNET'; Resource: 'Android Apps That Extend Battery Life'. 
Title: '5-Years-Old Shoots Sister'; Resource: 'CNN'. 
Title: 'Samsung Galaxy Note II'; Resource: 'Engaget'. 
... 
Title: 'Predicting If a Couple Stays Together'; Resource: 'The Atlantic Magazine'. 
Title: 'Why Doctors Die Differently'; Resource: 'The Wall Street Journal'. 
Title: 'The Ideal Nap Length'; Resource: 'Lifehacker'. 
+0

ありがとうございました。どのモジュールを(Python3用に)インストールすればurllib.parseとurljoinを利用できますか?私はそれを見つけるように見えない。 – dataelephant

+0

@Harelephant 'urllib'は組み込みで、インストールする必要はありません。 – alecxe

関連する問題