【问题标题】:Web scraping extract n-number of time the same thing网页抓取提取n次相同的东西
【发布时间】:2022-01-18 09:57:27
【问题描述】:

我有这个代码来抓取不同网站的所有部分,这些部分的部分 web 带有“transparencia”这个词。

但是,我不知道为什么当代码打印所有带有单词过滤器的 url 时,它会重复 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)


输出

例如,在此输出中,带有 world “transparencia” 的 url 会在每个网页部分重复并增加。但是当没有更多的网页部分时,代码会继续打印更多带有所有 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/


【问题讨论】:

    标签: python loops web-scraping iteration repeat


    【解决方案1】:

    如何解决?

    尝试关注并选择更具体的内容,例如使用css-selectors 并检查该网址是否已在您的网址列表中:

    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_/',
    ...]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2019-02-20
      • 1970-01-01
      相关资源
      最近更新 更多