Web 抓取提取 n 次相同的东西

Web scraping extract n-number of time the same thing

我有这段代码可以抓取不同网站的所有部分,这些部分的网页部分带有“transparencia”一词。

但是,我不知道为什么当代码打印所有 url 和单词 filter 时,它会重复 n 次。而我只需要其中之一。

输入

from bs4 import BeautifulSoup
import lxml
import pandas as pd
from tqdm import tqdm_notebook
import requests

listUrl = ["http://agricultura.gencat.cat","http://cultura.gencat.cat",
           "https://dretssocials.gencat.cat","http://economia.gencat.cat",
          "https://educacio.gencat.cat","http://empresa.gencat.cat",
          "http://interior.gencat.cat","http://justicia.gencat.cat",
          "https://presidencia.gencat.cat","https://salutweb.gencat.cat",
           "https://politiquesdigitals.gencat.cat","https://territori.gencat.cat"]


herfList=[]
codiNum = 0
keyWord = "transparencia"

def parse_url(url):
    response = requests.get(url)
    content = response.content
    parsed_response = BeautifulSoup(content, "lxml")
    return parsed_response

def extract_post_data (url):
    
    soup_url = parse_url(url)
    
    try:
        herf_transparencia = soup_url.find_all('a', href =True)
    except:
        herf_transparencia = ""
    
    dadesUrlDic= {"herf transparencia": herf_transparencia}
    
    return dadesUrlDic



for url in listUrl:
    soup = parse_url(url)
    referenceHref = soup.find_all(class_= "NG-megamenu__nav-link-self", href= True)
    
    for href in referenceHref:
        
            if href.text:
                herfList.append(href['href'])
                
                for i in herfList:
                    
                    if keyWord.lower() in i.lower(): 
                        urlWithKeyWord = url + i
                        print(urlWithKeyWord)


输出

例如,在此输出中,url 与世界“transparencia”重复并增加每个网页部分。但是当没有更多的网页部分时,代码会继续打印更多行,所有 url.

http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/funcio-publica/
http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/


如何修复?

尝试集中注意力并 select 更具体,例如使用 css-selectors 并检查 url 是否已经在您的 url 列表中:

for a in soup.select(f'a[href*={keyWord}]'):
    a=url+a["href"]
    if a not in hrefList:
        hrefList.append(a)

示例

请注意,它主要针对您的问题,并未包含您的所有代码。

from bs4 import BeautifulSoup
import requests

listUrl = ["http://agricultura.gencat.cat","http://cultura.gencat.cat",
           "https://dretssocials.gencat.cat","http://economia.gencat.cat",
          "https://educacio.gencat.cat","http://empresa.gencat.cat",
          "http://interior.gencat.cat","http://justicia.gencat.cat",
          "https://presidencia.gencat.cat","https://salutweb.gencat.cat",
           "https://politiquesdigitals.gencat.cat","https://territori.gencat.cat"]


hrefList=[]
keyWord = "transparencia"

def parse_url(url):
    response = requests.get(url)
    content = response.content
    parsed_response = BeautifulSoup(content, "lxml")
    return parsed_response

for url in listUrl:
    soup = parse_url(url)

    for a in soup.select(f'a[href*={keyWord}]'):
        a=url+a["href"]
        if a not in hrefList:
            hrefList.append(a)

hrefList

输出

['http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/',
 'http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/',
 'http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/cataleg-serveis/',
 'http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/normativa/',
 'http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/normativa-organitzacio/actuacions-administratives-juridiques/',
 'http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/',
 'http://agricultura.gencat.cat/ca/departament/transparencia-i-bon-govern/gestio-serveis-publics/auditories-serveis-publics/',
 'http://agricultura.gencat.cathttp://governobert.gencat.cat/ca/transparencia/Gestio-serveis-publics/Estudis-de-politiques-publiques-e-danalisi-comparada_/',
...]