gpt4 book ai didi

python - 当 ['href' ] 元素是超链接时如何提取 href

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:17 32 4
gpt4 key购买 nike

我正在尝试从网页中抓取数据,然后通过提取下一页的 href 来转到下一页。

但是,在这种情况下,包含下一页的 href 的标签是 href='#next'。使用 Chrome 检查此元素后,当我将鼠标悬停在“#next”一词上时,它似乎是一个超链接,显示完整的 href。

我怀疑一旦我发出请求并将其转换为文本,href就会丢失;

r = requests.get(url)

s = BeautifulSoup(r.text)

我使用 findAll() 函数来获取我正在查找的元素:

s.findAll('a', class_='pagenav')[5]

结果:

a href="#next" class="pagenav" title="next page" onclick="javascript:
document.pageForm.limitstart.value=20; document.pageForm.submit();return false;">
Next >

在这种情况下如何获取 href?

这是该网站的链接

https://associatedrealtorsaruba.com/index.php?option=com_ezrealty&Itemid=11&task=results&cnid=0&custom7=&custom8=&parking=&type=0&cid=0&stid=0&locid=0&minprice=&maxprice=&minbed=&maxbed=&min_squarefeet=&max_squarefeet=&bathrooms=&sold=0&lug=0&featured=0&custom4=&custom5=&custom6=&postcode=&radius=&direction=DEFAULT&submit=Search

最佳答案

如果您使用Selenium然后使用Selenium查找<a class="pagenav"><a title="next page">.click()它可以加载下一页,而您不必获取 href为了这。

import selenium.webdriver

url = 'https://associatedrealtorsaruba.com/index.php?option=com_ezrealty&Itemid=11&task=results&cnid=0&custom7=&custom8=&parking=&type=0&cid=0&stid=0&locid=0&minprice=&maxprice=&minbed=&maxbed=&min_squarefeet=&max_squarefeet=&bathrooms=&sold=0&lug=0&featured=0&custom4=&custom5=&custom6=&postcode=&radius=&direction=DEFAULT&submit=Search'

driver = selenium.webdriver.Firefox()
driver.get(url)

# find link to next page
next_page = driver.find_element_by_xpath('//a[@title="next page"]')

# click link to load next page
next_page.click()
<小时/>

顺便说一句:如果您手动加载页面 1、2 和 3 并在浏览器中比较它们的网址,那么您将看到网址中唯一的差异

for page 1: &limitstart=0 
for page 2: &limitstart=20
for page 3: &limitstart=40

这是加载下一页而不获取 href 的方法- 您必须获取原始网址并添加 &limitstart=使用正确的值加载不同的页面。

<小时/>

如果你想在页面上显示 50 个项目,那么你必须使用 &limit=50然后&limitstart必须使用值 0、50、100 等。

<小时/>

编辑:

有请求

import requests
from bs4 import BeautifulSoup as BS

url = 'https://associatedrealtorsaruba.com/index.php?option=com_ezrealty&Itemid=11&task=results&cnid=0&custom7=&custom8=&parking=&type=0&cid=0&stid=0&locid=0&minprice=&maxprice=&minbed=&maxbed=&min_squarefeet=&max_squarefeet=&bathrooms=&sold=0&lug=0&featured=0&custom4=&custom5=&custom6=&postcode=&radius=&direction=DEFAULT&submit=Search'

headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0', # need full UA
}

for x in (0, 20, 40):
r = requests.get(url + '&limitstart={}'.format(x), headers=headers)
print('\n---', x, '---\n')

soup = BS(r.text, 'html.parser')

all_items = soup.find_all('span', {'class': 'h3'})
for item in all_items:
print(item.get_text(strip=True))

含 Selenium

import selenium.webdriver

url = 'https://associatedrealtorsaruba.com/index.php?option=com_ezrealty&Itemid=11&task=results&cnid=0&custom7=&custom8=&parking=&type=0&cid=0&stid=0&locid=0&minprice=&maxprice=&minbed=&maxbed=&min_squarefeet=&max_squarefeet=&bathrooms=&sold=0&lug=0&featured=0&custom4=&custom5=&custom6=&postcode=&radius=&direction=DEFAULT&submit=Search'

driver = selenium.webdriver.Firefox()
driver.get(url)

while True:

all_items = driver.find_elements_by_xpath('//span[@class="h3"]')
for item in all_items:
print(item.text)

try:
# find link to next page
all_items = driver.find_element_by_xpath('//a[@title="next page"]')

# click link to load next page
all_items.click()
except Exception as ex:
print('ex:', ex)
break

关于python - 当 ['href' ] 元素是超链接时如何提取 href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59632031/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com