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_/',
...]
我有这段代码可以抓取不同网站的所有部分,这些部分的网页部分带有“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_/',
...]