2017-06-02 5 views
1

私はPythonのBeautifulSoupを使ってGoogleニュースのリンクをリストにしています。ここで私はこれまで得たものです:Googleニュースのリンク一覧を取得する

import requests 
from bs4 import BeautifulSoup 
import re 
#url is just some google link, not to worried about being able to search from Python code 
url = "https://www.google.com.mx/search?biw=1526&bih=778&tbm=nws&q=amazon&oq=amazon&gs_l=serp.3..0l10.1377.2289.0.2359.7.7.0.0.0.0.116.508.5j1.6.0....0...1.1.64.serp..1.5.430.0.19SoRsczxCA" 
#this part of the code avoids error 403, we need to identify ourselves 
browser = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7' 
headers={'User-Agent':browser,} 
#getting our html 
page = requests.get(url) 
soup = BeautifulSoup(page.content, "lxml") 
#looking for links and adding them up as a list 
links = soup.findAll("a") 
for link in soup.find_all("a",href=re.compile("(?<=/url\?q=)(htt.*://.*)")): 
list=(re.split(":(?=http)",link["href"].replace("/url?q=",""))) 
print(list) 

私の質問は:なぜ、いくつかのリンクは動作しませんか?例えば:

Forbes El Financiero El Mundo Cnet

答えて

0

このコードは動作するはずです:

import requests 
from bs4 import BeautifulSoup 
import re 

url = "https://www.google.com.mx/search?biw=1526&bih=778&tbm=nws&q=amazon&oq=amazon&gs_l=serp.3..0l10.1377.2289.0.2359.7.7.0.0.0.0.116.508.5j1.6.0....0...1.1.64.serp..1.5.430.0.19SoRsczxCA" 
browser = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7' 
headers = {'User-Agent':browser,} 
page = requests.get(url) 
soup = BeautifulSoup(page.content, "lxml") 
links = soup.findAll("a") 

l = [] 

for link in soup.find_all("a",href=re.compile("(?<=/url\?q=)(htt.*://.*)")): 
    l.append(re.split(":(?=http)",link["href"].replace("/url?q=",""))[0]) 

print(l) 

いくつかの注意:

  • は、変数名としてlistは絶対に使用しないでください!これはリストタイプの予約語です!
  • リンクが必要な場合。変数を上書きしないでリストに追加する必要があります。この目的でlist.appendメソッドを使用してください。
  • re.splitがリストを返すので、その中の最初の変数を選択する必要があります(これが私が[0]を使用した理由です)。
0

ブラウザで開いたときに、「404ページが見つかりません」というエラーが表示されます。したがってリンクは壊れているか死んでいる。これを参照できますwiki

BeautifulSoupでページコンテンツを解析する前に、URLのresponse status codeを確認する必要があります。

... 
page = requests.get(url) 
if page.status_code == requests.codes.ok: 
    soup = BeautifulSoup(page.content, "lxml") 
    .... 
関連する問題