java爬虫抓取动态网页( *敏*感*词*教你如何利用工具(IE9的F12)去分析模拟登陆google)

优采云 发布时间: 2021-09-12 04:06

  java爬虫抓取动态网页(

*敏*感*词*教你如何利用工具(IE9的F12)去分析模拟登陆google)

  动态网页

  相关内容:

  【教程】教你使用工具(IE9中的F12)分析模拟登录网站(百度主页)的内部逻辑流程)

  【记录】模拟登录google

  【教程】如何抓取动态网页内容

  【教程】以抓取网易博文近期读者信息为例,教你抓取动态网页内容。

  待办事项:

  找一个需要登录的网站,或者需要后续执行js加载的网页内容的例子,然后用抓包工具模拟登录,或者分析数据是如何加载的。

  示例:Chrom分析某某大众点评页面获取店铺数据,然后使用PySpider实现代码并下载数据

  这次通过一个例子,如何:

  期间要注意:需要对各种参数稍作模拟才能得到数据,否则会出现各种错误

  要分析的网址:

  用Chrome打开后,可以得到数据:

  

  但在 PySpider 中,使用代码:

  #!/usr/bin/env python

# -*- encoding: utf-8 -*-

# Created on 2019-04-15 14:56:12

# Project: DianpingChilrenEnglish

from pyspider.libs.base_handler import *

import os

import json

import codecs

import base64

import gzip

import copy

import time

import re

import csv

# import datetime

from datetime import datetime, timedelta

######################################################################

# Const

######################################################################

...

constCityListNamePattern = "cityList_%s_%s.json"

constMainCityFilename = "mainCityWithLevelList.json"

constUserAgentMacChrome = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"

gHost = "http://www.dianping.com"

CategoryLevel1ParentChild = "ch70" # 全部分类->亲子

CategoryLevel2ChildEnglish = "g27762" # 幼儿教育 -> 幼儿外语

######################################################################

# Project Specific Functions

######################################################################

######################################################################

# Main

######################################################################

class Handler(BaseHandler):

crawl_config = {

"connect_timeout": 100,

"timeout": 600,

"retries": 15,

"headers": {

"User-Agent": constUserAgentMacChrome,

"Accept": "application/json, text/javascript, */*; q=0.01",

"Content-Type": "application/json",

"Origin": "http://www.dianping.com",

# "X-Requested-With": "XMLHttpRequest",

}

}

def on_start(self):

# self.init()

self.realStart()

def realStart(self):

...

# for debug

"""

eachMainCity={'cityAbbrCode': 'SUZ', 'cityAreaCode': '0512', 'cityEnName': 'suzhou', 'cityId': 6, 'cityLevel': 2, 'cityName': '苏州', 'cityOrderId': 4888, 'cityPyName': 'suzhou', 'gLat': 31.297779, 'gLng': 120.585586, 'provinceId': 10, 'currentNodeLevel': 2, 'totalRank': '9', 'cityLevelFloat': 1.5, 'provinceName': '江苏省'}

cityEnName=suzhou

childEnglishEntryUrl=http://www.dianping.com/suzhou/ch70/g27762

"""

childEnglishEntryUrl = "http://www.dianping.com/suzhou/ch70/g27762"

self.crawl(

childEnglishEntryUrl,

callback=self.childEnglishCallback

)

def childEnglishCallback(self, response):

respUrl = response.url

print("respUrl=%s" % respUrl)

respText = response.text

print("respText=%s" % respText)

#

#

for eachShop in response.doc('ul[class="shop-list"] li[data-shopid]').items():

print("eachShop=%s" % eachShop)

  结果返回错误信息:

  respText={"customData":{"requestCode":"c9847c945a1440d49460df748b757250","verifyUrl":"https://optimus-mtsi.meituan.com/optimus/verify?request_code=c9847c945a1440d49460df748b757250","imageUrl":"https://verify.meituan.com/v2/captcha?action=spiderindefence&request_code=c9847c945a1440d49460df748b757250","verifyPageUrl":"https://verify.meituan.com/v2/app/general_page?action=spiderindefence&requestCode=c9847c945a1440d49460df748b757250&platform=1000&adaptor=auto&succCallbackUrl=https://optimus-mtsi.meituan.com/optimus/verifyResult"},"code":406,"msg":"您的网络好像不太给力,请稍后再试"}

  

  然后参考Chromet中看到的参数:

  

  对于各种header,试着一一添加,终于找到了:

  将 text/html 相关类型添加到接受:

  # "Accept": "application/json, text/javascript, */*; q=0.01",

"Accept": "application/json, text/javascript, text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*; q=0.8,application/signed-exchange;v=b3",

  可以得到数据:

  

  -》 前面提到的逻辑: 找个方法引用Chrome调试看到的所有重要参数:

  添加后

  ,大多数情况下可以得到对应的返回数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线