鱼C论坛

 找回密码
 立即注册
查看: 2371|回复: 3

selenium爬取职位

[复制链接]
发表于 2023-7-18 12:42:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问各位大佬们,我这个代码错在哪了,怎么爬了些这东西
  1. import time
  2. from selenium import webdriver
  3. from selenium.webdriver.common.by import By
  4. from selenium.webdriver.support import expected_conditions as EC
  5. from selenium.webdriver.support.wait import WebDriverWait
  6. from selenium.common.exceptions import TimeoutException
  7. import logging

  8. logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s: %(message)s')
  9. index_page = 3
  10. time_out = 10
  11. index_url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='

  12. #初始化浏览器
  13. path = 'D:/技能/chromedriver.exe'
  14. brower = webdriver.Chrome(executable_path=path)
  15. #显示等待
  16. wait = WebDriverWait(brower,time_out)

  17. #发起请求
  18. def scrape_url(url,condition,locator):
  19.     logging.info(f'正在爬取{url}')
  20.     try:
  21.         brower.get(url)
  22.         wait.until(condition(locator))
  23.     except TimeoutException:
  24.         logging.error('error occurred while scraping {}'.format(url),exc_info=True)


  25. #加载列表页
  26. def scrape_page():
  27.     while True:
  28.         scrape_url(index_url,condition=EC.presence_of_element_located,locator=(By.XPATH, "//div[@class='pager_container']/span[last()]"))
  29.         html = brower.page_source
  30.         wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='pager_container']/span[last()]")))
  31.         print(html)
  32.         next_button = brower.find_element(By.XPATH,"//div[@class='pager_container']/span[last()]")
  33.         if 'pager_next_disabled' in next_button.get_attribute('class'):
  34.             brower.close()
  35.             break
  36.         else:
  37.             next_button.click()

  38.     time.sleep(1)

  39. def main():
  40.     scrape_page()

  41. if __name__ == '__main__':
  42.     main()
复制代码

而且爬到后面海报错了
屏幕截图(77).png
屏幕截图(78).png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-18 12:42:40 | 显示全部楼层
根据你提供的代码,可能有以下几个问题导致爬取出错:

1. 需要等待页面加载完成再进行操作:在加载列表页时,需要等待页面加载完成后再进行操作,以确保页面元素已经完全加载出来。你可以使用 WebDriverWait 来等待元素的出现或可点击状态。在你的代码中,可以将 html = brower.page_source 移到 wait.until() 的后面。

2. 等待条件不准确:代码中使用了等待条件 EC.presence_of_element_located((By.XPATH, "//div[@class='pager_container']/span[last()]")),即等待最后一个分页按钮出现。但是在拉勾网的分页结构中,并不是最后一个按钮就代表没有下一页了,还需判断该按钮的类名是否包含 'pager_next_disabled',才能确定是否到达了最后一页。你可以修改判断语句为 if 'pager_next_disabled' in next_button.get_attribute('class'):

3. 浏览器关闭位置错误:在列表页爬取循环中,当判断到已到达最后一页并准备结束时,应在 if 分支内使用 brower.close() 关闭浏览器。在你的代码中,将 brower.close() 放在了 while True 循环外,导致浏览器无法正常关闭。

修正后的代码示例:
  1. import time
  2. import logging
  3. from selenium import webdriver
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.support import expected_conditions as EC
  6. from selenium.webdriver.support.wait import WebDriverWait
  7. from selenium.common.exceptions import TimeoutException
  8. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
  9. index_page = 3
  10. time_out = 10
  11. index_url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
  12. # 初始化浏览器
  13. path = 'D:/技能/chromedriver.exe'
  14. browser = webdriver.Chrome(executable_path=path)
  15. # 显示等待
  16. wait = WebDriverWait(browser, time_out)
  17. # 发起请求
  18. def scrape_url(url, condition, locator):
  19.     logging.info(f'正在爬取{url}')
  20.     try:
  21.         browser.get(url)
  22.         wait.until(condition(locator))
  23.     except TimeoutException:
  24.         logging.error('error occurred while scraping {}'.format(url), exc_info=True)
  25. # 加载列表页
  26. def scrape_page():
  27.     while True:
  28.         scrape_url(index_url, condition=EC.presence_of_element_located,
  29.                    locator=(By.XPATH, "//div[@class='pager_container']/span[last()]"))
  30.         html = browser.page_source
  31.         print(html)
  32.         next_button = browser.find_element(By.XPATH, "//div[@class='pager_container']/span[last()]")
  33.         if 'pager_next_disabled' in next_button.get_attribute('class'):
  34.             browser.close()
  35.             break
  36.         else:
  37.             next_button.click()
  38.             time.sleep(1)
  39. def main():
  40.     scrape_page()
  41. if __name__ == '__main__':
  42.     main()
复制代码

希望能帮到你!如果问题仍然存在,请提供更详细的错误信息以便进行进一步排查。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 15:47:57 | 显示全部楼层
陶远航 发表于 2023-7-18 12:42
根据你提供的代码,可能有以下几个问题导致爬取出错:

1. 需要等待页面加载完成再进行操作:在加载列表页 ...

请问最开始爬到的这些是什么呀
屏幕截图(77).png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 15:52:30 | 显示全部楼层
哈岁NB 发表于 2023-7-18 15:47
请问最开始爬到的这些是什么呀

我也不知道,给你叫个网络大神@isdkz
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 20:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表