python JS 反爬用 request 获取到的 HTML 不全,请各位帮我看看

import re
import sys
import requests
import execjs

url=’https://www.guazi.com/www/buy'
header={}#header太长就不放了
response=requests.get(url=url,headers=header)
response.encoding=’utf-8’
if ‘正在打开中,请稍后’ in response.text:
value_search = re.compile(r”anti(‘(.?)’,’(.?)’);”)
string = value_search.search(response.text).group(1)
key = value_search.search(response.text).group(2)
with open(‘guazi.js’, ‘r’) as f:
f_read = f.read()
js = execjs.compile(f_read)
js_return = js.call(‘anti’, string, key)
cookie_value = ‘antipas=’+js_return #获取的cookie值
header[‘Cookie’] = cookie_value
response_second = requests.get(url=url,headers=header)#加入cookie重新请求
response_second.encoding =’utf-8’
print(response_second.text)
不知道哪里有问题,还是就是request获取不到这个,麻烦各位帮我看看
html不全的位置
缺失部分的js
网页部分

pardon110
最佳答案

问题很明显,你这种操作只能抓取静态内容。那些由js渲染后拼接的动态内容是获取不到的。 解决思路有以下几种方式

  1. 借助 Selenium 抓取动态页面内容后,再用你上面的常规操作
  2. 直接查看控制台xhr,访问终极数据请求,然后数据组装
  3. 借用专业爬虫框架比如Scrapy,或者是像golang的动态爬虫框架ferret

简而言之,在向服务器发请求,得到的内容通常是html+css+js内容。你看到内容是被js执行后的内容(如果响应的内容有js代码)

4年前 评论
jean123 (楼主) 4年前
讨论数量: 2
pardon110

问题很明显,你这种操作只能抓取静态内容。那些由js渲染后拼接的动态内容是获取不到的。 解决思路有以下几种方式

  1. 借助 Selenium 抓取动态页面内容后,再用你上面的常规操作
  2. 直接查看控制台xhr,访问终极数据请求,然后数据组装
  3. 借用专业爬虫框架比如Scrapy,或者是像golang的动态爬虫框架ferret

简而言之,在向服务器发请求,得到的内容通常是html+css+js内容。你看到内容是被js执行后的内容(如果响应的内容有js代码)

4年前 评论
jean123 (楼主) 4年前

你好,scrapy爬取动态内容也要和seleium结合吧,不然也只是静态内容

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!