【问题标题】:Scraping with Selenium. for page in range() issue用硒刮擦。对于范围内的页面()问题
【发布时间】:2022-01-11 19:54:41
【问题描述】:

我正在尝试搜索 ethplorer.io。我想刮很多页。我的代码是这样的。但它刮了 page(11) 三次。 range(11,14) 我不明白为什么?

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
 
driver = webdriver.Chrome()

 
base_url = "https://ethplorer.io/tr/address/0xf87e31492faf9a91b02ee0deaad50d51d56d5d4d#pageSize=100&tab=tab-holders&holders="

results=[]

for page_number in range(11,14):
        url = base_url+str(page_number)
        driver.get(url)
        data = driver.find_elements(By.CLASS_NAME, "local-link")
        for x in data:
                results.append(x.text)

driver.quit

with open("all_data.txt" , "w") as file:
        for x in results:
                file.write(x + "\n")

【问题讨论】:

  • 用你期望的输出更新问题,你得到输出了吗?

标签: python selenium web-scraping


【解决方案1】:

我已对您的代码进行了一些修改,以使其在您调用的多个页面中运行,并在我假设您定位的超链接中捕获文本,请检查以下内容:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.common.exceptions import StaleElementReferenceException

from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())


 
url = "https://ethplorer.io/tr/address/0xf87e31492faf9a91b02ee0deaad50d51d56d5d4d#pageSize=100&tab=tab-holders&holders=11" # Here we are calling the first page we need, which is page #11 in this case.
xpath = "//div[@id='token-holders-tab']//div[@id='address-token-holders']//div[@class='block']//table//tr//td//a[contains(@class,'local-link')]"
driver.get(url)
data =driver.find_elements_by_xpath("//div[@id='token-holders-tab']//div[@id='address-token-holders']//div[@class='block']//table//tr//td//a[contains(@class,'local-link')]")
results=[]

for page_number in range(12,15): # Range should start from the next page (page # 12 in this case). Range end with last page you need + 2, in this case you need to scrape from 11 untill 13 ,so rage end should be 15.
        for x in data: # On first round it will get page # 11 data.
            results.append(x.text)
        nextPage = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,"//div[@id='token-holders-tab']//tr[contains(@class,'paginationFooter')]//A[@class='page-link'][text()='"+str(page_number)+"']")))
        driver.execute_script("arguments[0].click();", nextPage)
        time.sleep(3)
        data =driver.find_elements_by_xpath("//div[@id='token-holders-tab']//div[@id='address-token-holders']//div[@class='block']//table//tr//td//a[contains(@class,'local-link')]")

driver.quit

with open("all_data.txt" , "w") as file:
        for x in results:
                file.write(x + "\n")

【讨论】:

  • 不幸的是,文件“c:\Users\engin\OneDrive\Masaüstü\Python\script4.py”,第 23 行,在 中为 x in data: NameError: name 'data' is not定义
  • 我已修改代码以修复错误。抱歉,我忘记了一行。请再试一次。
  • 非常感谢。代码有效。但它刮掉了第 11-12-13 页。 ---对于范围(12,15)中的page_number:---它必须刮掉12-13-14吗?或者我们说 url=page=11 可能是它必须刮掉 11-12-13-14。你在想什么?
  • @engind。请告诉我您需要哪些页面?所以,我可以更好地向你解释。
  • 其实是不断变化的,视情况而定。这段代码不应该像这样正常工作吗?当我们给出一个范围(1,10)时,它给了我=1,2,3,4,5,6,7,8,9 页
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2021-10-06
  • 2022-01-02
  • 1970-01-01
相关资源
最近更新 更多