2017-05-04 11 views
0

スクリプトをPythonで実行すると、結果が重複して表示されます。この重複を取り除くための回避策はありますか?ここに私のスクリプトは次のとおりです。ここでスクラップ中に重複するリンクを取り除く

import requests 
from lxml import html 

def Startpoint(): 
    default="http://tennishub.co.uk" 
    link="http://tennishub.co.uk/" 
    response = requests.get(link) 
    tree = html.fromstring(response.text) 
    titles = tree.xpath('//div[@class="countylist"]') 
    for title in titles: 
     links = title.xpath('.//a/@href') 
     for link in links: 
      page = default + link 
      Midpoint(page) 

def Midpoint(address): 
    default="http://tennishub.co.uk" 
    response = requests.get(address) 
    tree = html.fromstring(response.text) 
    titles = tree.xpath('//div[@class="pagination"]') 
    for title in titles: 
     links = title.xpath('.//a/@href') 
     for link in links: 
      mlink = default + link 
      print(mlink) 

Startpoint() 

は私が取得しています何のスクリーンショットです:

enter image description here

+1

:あなたは

import requests from lxml import html def Startpoint(): default = "http://tennishub.co.uk" link = "http://tennishub.co.uk/" response = requests.get(link) tree = html.fromstring(response.text) titles = tree.xpath('//div[@class="countylist"]') processed_links = set() for title in titles: unprocessed_links = set(title.xpath('.//a/@href')) - processed_links for link in unprocessed_links: page = default + link Midpoint(page) processed_links |= unprocessed_links def Midpoint(address): default = "http://tennishub.co.uk" response = requests.get(address) tree = html.fromstring(response.text) titles = tree.xpath('//div[@class="pagination"]') processed_links = set() for title in titles: unprocessed_links = set(title.xpath('.//a/@href')) - processed_links for link in unprocessed_links: mlink = default + link print(mlink) processed_links |= unprocessed_links Startpoint() 

出力(set sが順序付けられていないので、あなたは異なる場合があり)などの各title未処理のリンクのためにフィルタリングする必要がある、あなたのリンクはすべてのページ全体で一意になりたいですURLを 'set'に追加します。リンクをスクラップする前に、リンクがセットに含まれているかどうかを確認してください。 – Barmar

+0

お返事ありがとうございました。重複を取り除くためにセットを使用することについてたくさん聞いたことがありますが、私はそれを使用できません、私はどこにどのように配置するのか分かりませんでした。 – SIM

+0

答えが更新されました。 –

答えて

2

順序は重要ではない場合、あなたのlinksオブジェクトの周りsetがあるため、重複を取り除くでしょう包みますあなたの場合はstrインスタンスがhashable

links = title.xpath('.//a/@href') 
links = set(links) 

ですあなたがこすりとき

http://tennishub.co.uk/tennis-clubs-by-county/Middlesex/3 
http://tennishub.co.uk/tennis-clubs-by-county/Middlesex/10 
http://tennishub.co.uk/tennis-clubs-by-county/Middlesex/2 
http://tennishub.co.uk/tennis-clubs-by-county/Middlesex/4 
http://tennishub.co.uk/tennis-clubs-by-county/Hampshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Hampshire/7 
http://tennishub.co.uk/tennis-clubs-by-county/Hampshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Hampshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Oxfordshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Oxfordshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Oxfordshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Buckinghamshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Buckinghamshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Buckinghamshire/5 
http://tennishub.co.uk/tennis-clubs-by-county/Buckinghamshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Berkshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Berkshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Berkshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/West Sussex/4 
http://tennishub.co.uk/tennis-clubs-by-county/West Sussex/3 
http://tennishub.co.uk/tennis-clubs-by-county/West Sussex/2 
http://tennishub.co.uk/tennis-clubs-by-county/East Sussex/3 
http://tennishub.co.uk/tennis-clubs-by-county/East Sussex/2 
http://tennishub.co.uk/tennis-clubs-by-county/Kent/8 
http://tennishub.co.uk/tennis-clubs-by-county/Kent/3 
http://tennishub.co.uk/tennis-clubs-by-county/Kent/4 
http://tennishub.co.uk/tennis-clubs-by-county/Kent/2 
http://tennishub.co.uk/tennis-clubs-by-county/Surrey/3 
http://tennishub.co.uk/tennis-clubs-by-county/Surrey/4 
http://tennishub.co.uk/tennis-clubs-by-county/Surrey/2 
http://tennishub.co.uk/tennis-clubs-by-county/Surrey/14 
http://tennishub.co.uk/tennis-clubs-by-county/Suffolk/2 
http://tennishub.co.uk/tennis-clubs-by-county/Suffolk/3 
http://tennishub.co.uk/tennis-clubs-by-county/Bedfordshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Hertfordshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Hertfordshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Hertfordshire/7 
http://tennishub.co.uk/tennis-clubs-by-county/Hertfordshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Cambridgeshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Cambridgeshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Cambridgeshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Norfolk/2 
http://tennishub.co.uk/tennis-clubs-by-county/Norfolk/3 
http://tennishub.co.uk/tennis-clubs-by-county/Essex/4 
http://tennishub.co.uk/tennis-clubs-by-county/Essex/2 
http://tennishub.co.uk/tennis-clubs-by-county/Essex/7 
http://tennishub.co.uk/tennis-clubs-by-county/Essex/3 
http://tennishub.co.uk/tennis-clubs-by-county/Cheshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Cheshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Cheshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Cheshire/7 
http://tennishub.co.uk/tennis-clubs-by-county/Cumbria/2 
http://tennishub.co.uk/tennis-clubs-by-county/Lancashire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Lancashire/9 
http://tennishub.co.uk/tennis-clubs-by-county/Lancashire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Lancashire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Warwickshire/6 
http://tennishub.co.uk/tennis-clubs-by-county/Warwickshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Warwickshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Warwickshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Staffordshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Shropshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Worcestershire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Worcestershire/2 
http://tennishub.co.uk/tennis-clubs-by-county/South Yorkshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/West Yorkshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/West Yorkshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/West Yorkshire/4 
http://tennishub.co.uk/tennis-clubs-by-county/West Yorkshire/5 
http://tennishub.co.uk/tennis-clubs-by-county/Northumberland/2 
http://tennishub.co.uk/tennis-clubs-by-county/East Yorkshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Durham/2 
http://tennishub.co.uk/tennis-clubs-by-county/North Yorkshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/North Yorkshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Devon/5 
http://tennishub.co.uk/tennis-clubs-by-county/Devon/4 
http://tennishub.co.uk/tennis-clubs-by-county/Devon/2 
http://tennishub.co.uk/tennis-clubs-by-county/Devon/3 
http://tennishub.co.uk/tennis-clubs-by-county/Wiltshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Wiltshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Dorset/2 
http://tennishub.co.uk/tennis-clubs-by-county/Dorset/3 
http://tennishub.co.uk/tennis-clubs-by-county/Somerset/2 
http://tennishub.co.uk/tennis-clubs-by-county/Somerset/4 
http://tennishub.co.uk/tennis-clubs-by-county/Somerset/3 
http://tennishub.co.uk/tennis-clubs-by-county/Gloucestershire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Gloucestershire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Gloucestershire/5 
http://tennishub.co.uk/tennis-clubs-by-county/Gloucestershire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Cornwall/2 
http://tennishub.co.uk/tennis-clubs-by-county/Nottinghamshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Nottinghamshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Lincolnshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Derbyshire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Derbyshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Leicestershire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Leicestershire/2 
http://tennishub.co.uk/tennis-clubs-by-county/Leicestershire/4 
http://tennishub.co.uk/tennis-clubs-by-county/Northamptonshire/3 
http://tennishub.co.uk/tennis-clubs-by-county/Northamptonshire/2 
+0

これは、異なるページ間ではなく、1ページ内で重複を取り除きます。 – Barmar

+0

お返事ありがとうございます、Azat Ibrakovありがとうございます。しかし、重複した結果にはまったく影響しません。 – SIM

+0

あなたの堅牢なソリューションのおかげでAzat Ibrakovに感謝します。それは完全に動作します。 – SIM

関連する問題