使用 Python 查找网站的最后一页
Finding the last page in a website using Python
我正在编写代码来抓取亚马逊网站上的产品价格。
我正在尝试找到仍然有可用产品的网站的最后一页。
导航页面如下所示:
Navigation Panel
最后一页是 8
,已禁用。我的程序遍历每个页面并提取产品信息。从第 8 页提取后,程序应停止。但是当我试图以文本形式获取数字 8
时,我得到的是 ...
文本。
我尝试使用 bs4 来获取文本。但是 HTML 代码和其他标签对于 8
和 ...
是相同的
<li class="a-disabled" aria-disabled="true">...</li>
<li class="a-disabled" aria-disabled="true">8</li>
所以我尝试使用 selenium 的 find_element_by_xpath
并将其转换为文本以找到最大页数。但是我收到 NoSuchElementException
错误,它说它无法找到 XPath。
这是我导航到下一页并提取产品信息的代码的一部分:
def navigate_to_next_page():
try:
max_pages = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div/div[1]/div/span[3]/div[2]/div[20]/span/div/div/ul/li[6]").text
print(max_pages)
except NoSuchElementException:
print("Max Page Number Not Found")
for i in range(2,21):
next_page_url = get_search_product_url(driver, "samsung phones") + "&page=" + str(i)
driver.get(next_page_url)
results = extract_webpage_information()
records = record_product_information(results)
return records
请忽略for i in range(2,21):
。这是为了测试目的。
如果 bs4 和 selenium 方法都不起作用,我如何获得网站上的最大页面数?
我可能已经从网站中提取了最后一个页码并将其附加在 URL 中以逐页浏览每一页 - 请找到相同的工作代码。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get('https://www.amazon.in')
SearchTextbox = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@id=\"twotabsearchtextbox\"]")))
SearchTextbox.send_keys("pencil")
SearchTextbox.send_keys(Keys.ENTER)
GetLastPageNumber = wait.until(EC.presence_of_element_located(
(By.XPATH, "//li/a[text()=\"Next\"]/parent::li/preceding-sibling::li[contains(@aria-disabled,\"true\")][1]")))
print("Last Page Number is : " + GetLastPageNumber.text)
for i in range(int(GetLastPageNumber.text) + 1):
myurl = "https://www.amazon.in/s?k=pencil&page={0}&qid=1618567039&ref=sr_pg_2".format(str(i))
driver.get(myurl)
print("I'm done")
注意 - 根据您所在的国家/地区更改 URL。
如果解决了您的问题,请标记为答案。
我正在编写代码来抓取亚马逊网站上的产品价格。
我正在尝试找到仍然有可用产品的网站的最后一页。
导航页面如下所示: Navigation Panel
最后一页是 8
,已禁用。我的程序遍历每个页面并提取产品信息。从第 8 页提取后,程序应停止。但是当我试图以文本形式获取数字 8
时,我得到的是 ...
文本。
我尝试使用 bs4 来获取文本。但是 HTML 代码和其他标签对于 8
和 ...
<li class="a-disabled" aria-disabled="true">...</li>
<li class="a-disabled" aria-disabled="true">8</li>
所以我尝试使用 selenium 的 find_element_by_xpath
并将其转换为文本以找到最大页数。但是我收到 NoSuchElementException
错误,它说它无法找到 XPath。
这是我导航到下一页并提取产品信息的代码的一部分:
def navigate_to_next_page():
try:
max_pages = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div/div[1]/div/span[3]/div[2]/div[20]/span/div/div/ul/li[6]").text
print(max_pages)
except NoSuchElementException:
print("Max Page Number Not Found")
for i in range(2,21):
next_page_url = get_search_product_url(driver, "samsung phones") + "&page=" + str(i)
driver.get(next_page_url)
results = extract_webpage_information()
records = record_product_information(results)
return records
请忽略for i in range(2,21):
。这是为了测试目的。
如果 bs4 和 selenium 方法都不起作用,我如何获得网站上的最大页面数?
我可能已经从网站中提取了最后一个页码并将其附加在 URL 中以逐页浏览每一页 - 请找到相同的工作代码。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get('https://www.amazon.in')
SearchTextbox = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@id=\"twotabsearchtextbox\"]")))
SearchTextbox.send_keys("pencil")
SearchTextbox.send_keys(Keys.ENTER)
GetLastPageNumber = wait.until(EC.presence_of_element_located(
(By.XPATH, "//li/a[text()=\"Next\"]/parent::li/preceding-sibling::li[contains(@aria-disabled,\"true\")][1]")))
print("Last Page Number is : " + GetLastPageNumber.text)
for i in range(int(GetLastPageNumber.text) + 1):
myurl = "https://www.amazon.in/s?k=pencil&page={0}&qid=1618567039&ref=sr_pg_2".format(str(i))
driver.get(myurl)
print("I'm done")
注意 - 根据您所在的国家/地区更改 URL。
如果解决了您的问题,请标记为答案。