2016-11-14 15 views
0

私はhttps://www.similarweb.comにこのスニペットを実行しているときに、私はこのフィルターのハイパーリンク - パイソン

site = 'https://www.similarweb.com' 
resp = requests.get(site) 
encoding = resp.encoding if 'charset' in resp.headers.get('content-type', '').lower() else None 
soup = BeautifulSoup(resp.content, from_encoding=encoding) 

contact_links = [] 
for a in soup.find_all('a', href=True): 
    if 'product' in a['href'] or 'service' in a['href'] or 'solution' in a['href'] or 'about' in a['href'] or 'index' in a['href']: 
     contact_links.append(a['href']) 

contact_links2 = [] 
for i in contact_links: 
    string2 = i 
    if string2[:4] == 'http': 
     contact_links2.append(i) 
    else: 
     contact_links2.append(site+i) 

for i in contact_links2: 
    print i 

を思い付いたURLのテキストproductservicesolutionindex

のような言葉が含まれるウェブサイトからのすべてのハイパーリンクを取得したいですいくつかのいくつかのリンクを提供しています。

https://www.similarweb.com/apps/top/google/app-index/us/all/top-free 
https://www.similarweb.com/corp/solution/travel/ 
https://www.similarweb.com/corp/about/ 
http://www.thedailybeast.com/articles/2016/10/17/drudge-limbaugh-fall-for-twitter-joke-about-postal-worker-destroying-trump-ballots.html 
https://www.similarweb.com/apps/top/google/app-index/us/all/top-free 

(だけ前の5つのリンクを考慮して)

https://www.similarweb.com/corp/about/ 

私はどのように操作を行うことができます。この結果に続いて、私はこれらの言葉productservicesolutionindex

期待出力任意の複数の単語があってはならないだけで、これらのリンクをしたいですそれ?

+0

削除したいURLのサンプルを教えてください。 –

+0

ここで、 'product'''''''''''''''''''''''はURLの最後の単語にする必要があります – Guru

+0

@LutzHorn私はサンプルのもののうち3番目のURLを欲しい – Guru

答えて

1

条件の場合にチェックインしている単語の前後にバックスラッシュを付ける必要があります。それはif '/product/' in a['href'] ...などである必要があります。

コメントに記載されているとおり、最後の単語である必要があります。a['href'].endswith('/product/')をよく確認してください。 endswith関数はパラメータとしてタプルを取ることができるので、このようにすることができます。

if a['href'].endswith(('/product/', '/index/', '/about/', '/solution/', 'service'))

この条件は、タプルに記述された文字列で終わるすべてのURLについて真と評価されます。

+0

バリアントをカバーできるようにここに正規表現を含めることもできます。 「aboutus」「about-us」やendswithのように – Guru

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


r = requests.get('https://www.similarweb.com/') 
soup = BeautifulSoup(r.text, 'lxml') 
urls = set() 

for i in soup.find_all('a', href=re.compile(r'((about)|(product)|(service)|(solution)|(index))/$')): 
    url = i.get('href') 
    abs_url = urljoin(r.url, url) 
    urls.add(abs_url) 
print(urls)