哈岁NB 发表于 2023-2-6 22:52:18

爬虫爬取源码

import requests
from lxml import html
etree = html.etree
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
}
url = 'https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908'
response = requests.get(url=url,headers=header).text
print(response)
大佬们,这个为什么爬取不到页面源码呀

isdkz 发表于 2023-2-6 23:15:06

本帖最后由 isdkz 于 2023-2-6 23:41 编辑

爬到的结果这里可以看到最后面有这么一段 js 代码

function reload(x) {setCookie("acw_sc__v2", x);document.location.reload();}

这里是设置了一个 cookie 然后重载界面,这个 x 是 js 算出来的,你可以想办法执行获取到的 js 代码得到这个x,也可以审计它的js代码并把逻辑在 Python 中复现 (但是我看了一下它那个js是混淆加密了的,除非你精力旺盛有时间,不然就别想了)

最简单的办法还是去浏览器复制,不用复制完全,就复制这个界面需要的 acw_sc__v2,因为这个 Cookie 是这个页面最后设置的一个 Cookie,所以它应该排在 Cookie 的最后面

代码(记得改这个 Cookie,去你的浏览器那里复制,因为这个Cookie的有效期很短):
import requests
from lxml import html
etree = html.etree
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
    'Cookie': 'acw_sc__v2=63e1167ba5665f0022e4fc72118dfc0e71b871b8'                              # 要改这里
}

url = 'https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908'
response = requests.get(url=url, headers=header).text
print(response)

哈岁NB 发表于 2023-2-7 09:22:27

isdkz 发表于 2023-2-6 23:15
爬到的结果这里可以看到最后面有这么一段 js 代码

function reload(x) {setCookie("acw_sc__v2", x);doc ...

好的,感谢感谢

哈岁NB 发表于 2023-2-7 11:25:12

isdkz 发表于 2023-2-6 23:15
爬到的结果这里可以看到最后面有这么一段 js 代码

function reload(x) {setCookie("acw_sc__v2", x);doc ...

那可以用selenium获取cookie,然后用requests爬取源码吗

isdkz 发表于 2023-2-7 11:26:25

哈岁NB 发表于 2023-2-7 11:25
那可以用selenium获取cookie,然后用requests爬取源码吗

可以,也可以用 requests-html,requests-html这个库你可以了解一下

哈岁NB 发表于 2023-2-7 11:36:17

isdkz 发表于 2023-2-7 11:26
可以,也可以用 requests-html,requests-html这个库你可以了解一下

好的,感谢感谢

哈岁NB 发表于 2023-2-7 12:04:37

本帖最后由 哈岁NB 于 2023-2-7 12:06 编辑

isdkz 发表于 2023-2-7 11:26
可以,也可以用 requests-html,requests-html这个库你可以了解一下

import requests
from lxml import html
etree = html.etree
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

bro = webdriver.Chrome('D:/技能/chromedriver.exe')
bro.get('https://xiaoyuan.zhaopin.com/')
bro.find_element(By.XPATH,'//*[@id="root"]/div/div/div/div/div/a').click()
sleep(10)
bro.find_element(By.XPATH,'//*[@id="root"]/div/div/div/div/span').click()
sleep(2)

cookies = bro.get_cookies()

bro.quit()

#解析cookie
dic = {}
for cookie in cookies:
    dic] = cookie['value']

header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
}
url = 'https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908'
response = requests.get(url=url,headers=header,cookies=dic).text
print(response)
用selenium爬取cookie,怎么爬到cookie就缺少acw_sc__v2这个呢

isdkz 发表于 2023-2-7 12:21:36

哈岁NB 发表于 2023-2-7 12:04
用selenium爬取cookie,怎么爬到cookie就缺少acw_sc__v2这个呢

因为那个 cookie 是在 https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908 这个页面生成的,而你用 selenium 访问的不是这个页面
import requests
from lxml import html
etree = html.etree
import warnings
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from time import sleep

warnings.simplefilter('ignore',Warning)
chrome_options = Options()
chrome_options.add_argument('--headless')

bro = webdriver.Chrome('chromedriver.exe', options=chrome_options)
url = 'https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908'
bro.get(url)
#解析cookie
cookie = {}
cookie['acw_sc__v2'] = bro.get_cookie('acw_sc__v2')['value']
bro.quit()


header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
}
response = requests.get(url=url,headers=header,cookies=cookie).text
print(response)

哈岁NB 发表于 2023-2-7 12:32:01

isdkz 发表于 2023-2-7 12:21
因为那个 cookie 是在 https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908 这个页面生成的,而你 ...

这个页面不是也有acw_sc__v2这个吗

isdkz 发表于 2023-2-7 13:19:35

哈岁NB 发表于 2023-2-7 12:32
这个页面不是也有acw_sc__v2这个吗

那个是你访问过https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908 之后留下的,

你可以重新开一个无痕页面直接访问 https://xiaoyuan.zhaopin.com 就会发现 cookie 没有 acw_sc__v2 这个,

要你访问过 https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908 之后才有

哈岁NB 发表于 2023-2-7 15:02:46

isdkz 发表于 2023-2-7 13:19
那个是你访问过https://xiaoyuan.zhaopin.com/job/CC407288330J40383568908 之后留下的,

你可以重 ...

明白了,感谢感谢
页: [1]
查看完整版本: 爬虫爬取源码