Python 使用西班牙凉菜汤进行网络抓取 return url
Python web-scraping return url using Gazpacho
如何使用西班牙凉菜汤 return 项目中的 URL 文本?
from gazpacho import get, Soup
page = 0
id = 0
try:
while True:
page += 1
url = f'https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/regiao-serrana/petropolis/imoveis?o={page}'
html = get(url)
soup = Soup(html)
offers = soup.find('div', {'class': 'fnmrjs-1 gIEtsI'}, strict=True)
for item in offers:
id += 1
title = item.find('h2', {'class': 'sc-1mbetcw-0 eJfLou sc-ifAKCX jyXVpA'}, strict=True).text
price = item.find('div', {'class': 'aoie8y-0 hRScWw'}, strict=True).text
location = item.find('span', {'class': 'sc-7l84qu-1 ciykCV sc-ifAKCX dpURtf'}, strict=True).text
#link = ????
print(str(id), "-",title , price, location , link)
except KeyboardInterrupt:
print('Interrupted using CTRL + C')
此外,我发现 运行 在所有页面上添加 +1 值的方法并不好,因为如果我达到一个不存在的值,它会在第一页开始循环,如果你们,我将不胜感激有什么办法处理它。
要获取后续链接,您可能需要搜索所有 li
标签并提取锚点。
例如:
from gazpacho import get, Soup
url = f'https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/regiao-serrana/petropolis/imoveis?o=1'
offers = Soup(get(url)).find(
'li',
{"class": "sc-1fcmfeb-2 juiJqh"},
partial=True,
)
follow_links = [
o.find("a").attrs.get("href") for o in offers if o.find("a")
]
print("\n".join(follow_links))
输出:
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-845800716
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-para-locacao-15-min-a-pe-do-centro-historico-845797561
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-de-quarto-e-sala-no-centro-791808170
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/comercio-e-industria/self-storage-guarda-moveis-estoque-e-documentos-548419653
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-841458075
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-02-quartos-sendo-01-suite-mosela-petropolis-rj-805359360
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/cobertura-duplex-com-2-vagas-proximo-ao-centro-petropolis-rj-818116827
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/condominio-pedra-do-retiro-759441464
and much more ...
编辑:
要解决再次循环访问相同页面的问题,只需获取可用页面的总数并将其用于 range()
。
将所有这些放在一起,您可能会得到这样的结果:
from gazpacho import get, Soup
base_url = f'https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/regiao-serrana/petropolis'
s = Soup(get(f"{base_url}/imoveis?o=1"))
total_pages = int(
"".join(
i.strip().split()[-1] for i
in s.find("p", {"color": "dark"})
if "Página" in i.text
)
)
for page in range(1, total_pages + 1):
s = Soup(get(f"{base_url}/imoveis?o={page}"))
offers = s.find('li', {"class": "sc-1fcmfeb-2 juiJqh"}, partial=True)
follow_links = [
o.find("a").attrs.get("href") for o in offers if o.find("a")
]
descriptions = [
o.find("h2", {"color": "dark"})[0].text for o in offers if o.find("h2")
]
prices = [
o.find("p", {"class": "sc-ifAKCX eoKYee"}).text
if o.find("p", {"class": "sc-ifAKCX eoKYee"}) else "N/A"
for o in offers
]
search_results = zip(descriptions, follow_links, prices)
bar = '-' * max(len(l) for l in follow_links)
print(
"\n".join(
f"{desc}\nPrice: {price}\nURL: {link}\n{bar}" for
desc, link, price in search_results
)
)
输出:
Casa de condomínio à venda com 5 dormitórios em Corrêas, Petrópolis cod:2610
Price: R$ 2.000.000
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-de-condominio-a-venda-com-5-dormitorios-em-correas-petropolis-cod-2610-821071980
----------------------------------------------------------------------------------------------------------------------------------------------------------
Apartamento todo Reformado no Centro de Petrópolis
Price: N/A
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-todo-reformado-no-centro-de-petropolis-845056149
----------------------------------------------------------------------------------------------------------------------------------------------------------
Casa
Price: N/A
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-845800716
----------------------------------------------------------------------------------------------------------------------------------------------------------
Casa para locação (15 min. a pé do centro histórico)
Price: R$ 749.990
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-para-locacao-15-min-a-pe-do-centro-historico-845797561
----------------------------------------------------------------------------------------------------------------------------------------------------------
and more ...
如何使用西班牙凉菜汤 return 项目中的 URL 文本?
from gazpacho import get, Soup
page = 0
id = 0
try:
while True:
page += 1
url = f'https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/regiao-serrana/petropolis/imoveis?o={page}'
html = get(url)
soup = Soup(html)
offers = soup.find('div', {'class': 'fnmrjs-1 gIEtsI'}, strict=True)
for item in offers:
id += 1
title = item.find('h2', {'class': 'sc-1mbetcw-0 eJfLou sc-ifAKCX jyXVpA'}, strict=True).text
price = item.find('div', {'class': 'aoie8y-0 hRScWw'}, strict=True).text
location = item.find('span', {'class': 'sc-7l84qu-1 ciykCV sc-ifAKCX dpURtf'}, strict=True).text
#link = ????
print(str(id), "-",title , price, location , link)
except KeyboardInterrupt:
print('Interrupted using CTRL + C')
此外,我发现 运行 在所有页面上添加 +1 值的方法并不好,因为如果我达到一个不存在的值,它会在第一页开始循环,如果你们,我将不胜感激有什么办法处理它。
要获取后续链接,您可能需要搜索所有 li
标签并提取锚点。
例如:
from gazpacho import get, Soup
url = f'https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/regiao-serrana/petropolis/imoveis?o=1'
offers = Soup(get(url)).find(
'li',
{"class": "sc-1fcmfeb-2 juiJqh"},
partial=True,
)
follow_links = [
o.find("a").attrs.get("href") for o in offers if o.find("a")
]
print("\n".join(follow_links))
输出:
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-845800716
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-para-locacao-15-min-a-pe-do-centro-historico-845797561
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-de-quarto-e-sala-no-centro-791808170
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/comercio-e-industria/self-storage-guarda-moveis-estoque-e-documentos-548419653
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-841458075
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-02-quartos-sendo-01-suite-mosela-petropolis-rj-805359360
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/cobertura-duplex-com-2-vagas-proximo-ao-centro-petropolis-rj-818116827
https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/condominio-pedra-do-retiro-759441464
and much more ...
编辑:
要解决再次循环访问相同页面的问题,只需获取可用页面的总数并将其用于 range()
。
将所有这些放在一起,您可能会得到这样的结果:
from gazpacho import get, Soup
base_url = f'https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/regiao-serrana/petropolis'
s = Soup(get(f"{base_url}/imoveis?o=1"))
total_pages = int(
"".join(
i.strip().split()[-1] for i
in s.find("p", {"color": "dark"})
if "Página" in i.text
)
)
for page in range(1, total_pages + 1):
s = Soup(get(f"{base_url}/imoveis?o={page}"))
offers = s.find('li', {"class": "sc-1fcmfeb-2 juiJqh"}, partial=True)
follow_links = [
o.find("a").attrs.get("href") for o in offers if o.find("a")
]
descriptions = [
o.find("h2", {"color": "dark"})[0].text for o in offers if o.find("h2")
]
prices = [
o.find("p", {"class": "sc-ifAKCX eoKYee"}).text
if o.find("p", {"class": "sc-ifAKCX eoKYee"}) else "N/A"
for o in offers
]
search_results = zip(descriptions, follow_links, prices)
bar = '-' * max(len(l) for l in follow_links)
print(
"\n".join(
f"{desc}\nPrice: {price}\nURL: {link}\n{bar}" for
desc, link, price in search_results
)
)
输出:
Casa de condomínio à venda com 5 dormitórios em Corrêas, Petrópolis cod:2610
Price: R$ 2.000.000
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-de-condominio-a-venda-com-5-dormitorios-em-correas-petropolis-cod-2610-821071980
----------------------------------------------------------------------------------------------------------------------------------------------------------
Apartamento todo Reformado no Centro de Petrópolis
Price: N/A
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/apartamento-todo-reformado-no-centro-de-petropolis-845056149
----------------------------------------------------------------------------------------------------------------------------------------------------------
Casa
Price: N/A
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-845800716
----------------------------------------------------------------------------------------------------------------------------------------------------------
Casa para locação (15 min. a pé do centro histórico)
Price: R$ 749.990
URL: https://rj.olx.com.br/serra-angra-dos-reis-e-regiao/imoveis/casa-para-locacao-15-min-a-pe-do-centro-historico-845797561
----------------------------------------------------------------------------------------------------------------------------------------------------------
and more ...