鱼C论坛

 找回密码
 立即注册
查看: 3706|回复: 12

[已解决]boss直聘爬虫页面不断刷新,数据无法读取

[复制链接]
发表于 2022-11-29 11:27:59 | 显示全部楼层 |阅读模式

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

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

x
想要通过playwright模块对boss直聘进行爬虫
目前的问题:
1.在跑代码,登录boss直聘的时候,登录后的主页面一直刷新,以前在用八爪鱼爬boss的时候也是这样,爬到一半,在某一个页面一直刷新,这有办法解决嘛?
2.下面的代码是从我已经写好的智联招聘的爬虫代码copy,修改过来的,但是在boss直聘上跑的时候却读取不了任何数据,这是为什么啊?
  1. import time
  2. from playwright.sync_api import sync_playwright
  3. import playwright
  4. from bs4 import BeautifulSoup
  5. import json
  6. import openpyxl
  7. def spiders():
  8. # #获取cookie
  9. #     browser = playwright.chromium.launch(headless=False)
  10. #     context = browser.new_context()
  11. #     page = context.new_page()
  12. #     page.goto('https://login.zhipin.com/?ka=header-login')
  13. #     page.get_by_role("link", name="验证码登录").click()
  14. #     page.get_by_role("textbox", name="手机号").fill("15521292132")
  15. #     time.sleep(50)
  16. #     #保存cookies
  17. #     cookies = context.cookies()
  18. #     with open('boss直聘cookies.json', 'w') as c:
  19. #         c.write(json.dumps(cookies))
  20. #     context.close()
  21. #     browser.close()
  22. #     #重新打开浏览器
  23. #     #加载cookies

  24.     with open('boss直聘cookies.json', 'r') as r:
  25.         load_cookies = json.loads(r.read())
  26.     browser = playwright.chromium.launch(headless=False)
  27.     context = browser.new_context()
  28.     context.add_cookies(load_cookies)
  29.     page1 = context.new_page()
  30.     page2 = context.new_page()
  31.     page1.goto('https://www.zhipin.com/web/geek/job?query=VR&city=101240100&page=1')
  32.     time.sleep(5)
  33.     #翻页
  34.     data = []
  35.     for page_num in range(1,2):
  36.         page1.goto(f'https://www.zhipin.com/web/geek/job?query=VR&city=101240100&page={page_num}')
  37.     #提取数据,获取列表
  38.         job_list = BeautifulSoup(page1.content(), "html.parser")
  39.         time.sleep(5)
  40.         for i in job_list.find_all('ul', attrs={'class':'job-list-box'}):
  41.             job_name = i.find('span', attrs={'class':'job-name'}).text
  42.             job_area = i.find('span', attrs={'class':'class="job-area'}).text
  43.             job_comp = i.find('span', attrs={'ka':"search_list_company_1_custompage"}).text
  44.             job_salary = i.find('span', attrs={'class':'salary'}).text
  45.             detail_page = i.find('a').attrs['href']
  46.             # # 提取详情页信息
  47.             # page2.goto(url=detail_page)
  48.             # time.sleep(1)
  49.             # detail_content = BeautifulSoup(page2.content(), "html.parser")
  50.             # detail = detail_content.find('div', attrs={'class': 'describtion'}).text
  51.             data.append([job_name, job_area,job_comp, job_salary, detail_page,])
  52.             print(job_name, job_area,job_comp, job_salary, detail_page, )

  53.     #储存数据
  54.     book = openpyxl.load_workbook('boss直聘.xlsx')
  55.     sheet = book['boss']
  56.     for row in data:
  57.         sheet.append(row)
  58.     print('写入数据条数:',len(data))
  59.     book.save('boss直聘.xlsx')

  60. with sync_playwright() as playwright:
  61.     spiders()
复制代码
最佳答案
2022-11-29 17:14:08
本帖最后由 cflying 于 2022-11-29 18:51 编辑
  1. page1.goto(f'https://www.zhipin.com/web/geek/job?query=VR&city=101240100&page={}'.format(page_num))
复制代码


看了眼,刷新应该是网站的安全验证,
至于为啥没数据,那是因为页面还没加载出来你就下一步了,要么设置sleep等几秒,要么等待某个元素出来后再下一步,LZ再研究研究

对了,最后记得加close

最后,遇到问题要想程序运行的逻辑,然后一步一步找原因,就像这个一样,如果是刷新,至少应该打开界面看看人家刷新了啥地址吧,爬不到数据至少返回去让代码返回一个响应页面源码看看呗,要是源码里都没内容,那还爬个啥

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-29 13:06:23 | 显示全部楼层
playwright不是可以有界面的嘛,看界面是卡在哪个页面嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-29 13:25:27 | 显示全部楼层
cflying 发表于 2022-11-29 13:06
playwright不是可以有界面的嘛,看界面是卡在哪个页面嘛

对于问题1:一般是登陆后,在boss直聘的主页一直刷新,但刷新几次后就听了,所以我用time.sleep给他个加载时间,但我不知道出现这个问题的原因是什么
问题2:整个程序是可以跑的,但是读取不了文本
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 17:14:08 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cflying 于 2022-11-29 18:51 编辑
  1. page1.goto(f'https://www.zhipin.com/web/geek/job?query=VR&city=101240100&page={}'.format(page_num))
复制代码


看了眼,刷新应该是网站的安全验证,
至于为啥没数据,那是因为页面还没加载出来你就下一步了,要么设置sleep等几秒,要么等待某个元素出来后再下一步,LZ再研究研究

对了,最后记得加close

最后,遇到问题要想程序运行的逻辑,然后一步一步找原因,就像这个一样,如果是刷新,至少应该打开界面看看人家刷新了啥地址吧,爬不到数据至少返回去让代码返回一个响应页面源码看看呗,要是源码里都没内容,那还爬个啥

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-30 11:40:31 | 显示全部楼层
cflying 发表于 2022-11-29 17:14
看了眼,刷新应该是网站的安全验证,
至于为啥没数据,那是因为页面还没加载出来你就下一步了,要么设 ...

我上网查了反扒机制,刷新时因为boss直聘的cookie回动态更新,这些直接把我整不会了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-30 11:45:50 | 显示全部楼层
熊猫竹子 发表于 2022-11-30 11:40
我上网查了反扒机制,刷新时因为boss直聘的cookie回动态更新,这些直接把我整不会了

又没啥影响,最后一刻的页面是准确就行,多等几秒就行了呗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-30 13:24:56 | 显示全部楼层
cflying 发表于 2022-11-30 11:45
又没啥影响,最后一刻的页面是准确就行,多等几秒就行了呗

但是他刷新次数多了会出错,而且感觉和等待时间没有关系
playwright._impl._api_types.Error: Unable to retrieve content because the page is navigating and changing the content.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-30 21:07:54 | 显示全部楼层
熊猫竹子 发表于 2022-11-30 13:24
但是他刷新次数多了会出错,而且感觉和等待时间没有关系
playwright._impl._api_types.Error: ...

我刚才试了哈,那个反复刷新的就是网站的反爬检测,问题不大,换个IP就好了,问题不大,最终刷新后的页面是OK的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-12-1 10:08:53 | 显示全部楼层
cflying 发表于 2022-11-30 21:07
我刚才试了哈,那个反复刷新的就是网站的反爬检测,问题不大,换个IP就好了,问题不大,最终刷新后的页面 ...

谢谢大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-1 16:50:47 | 显示全部楼层
本帖最后由 cflying 于 2022-12-1 19:06 编辑


不好意思,这两天忙没看这个,刚才看到你信息,我又回去看了哈,确实会出错,就是网站反爬,不过好处理,你给代码里加一段注释就行args就是
  1. browser = playwright.chromium.launch(headless=False,channel='msedge',args=["--enable-automation=true","--disable-blink-features=AutomationControlled"])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-12-6 17:34:14 | 显示全部楼层
cflying 发表于 2022-12-1 16:50
不好意思,这两天忙没看这个,刚才看到你信息,我又回去看了哈,确实会出错,就是网站反爬,不过好处理 ...

这串代码可以用在任何的一个招聘网站上吗?(比如说智联)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-6 17:54:10 | 显示全部楼层
熊猫竹子 发表于 2022-12-6 17:34
这串代码可以用在任何的一个招聘网站上吗?(比如说智联)

可以呀,但是智联本身没检测这个,所以加不加无所谓
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-12-6 23:18:35 | 显示全部楼层
qwq
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 13:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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