事实:浏览器抓取网页的时候,从来都不是把所有的网页都抓取下来

优采云 发布时间: 2022-09-22 15:05

  事实:浏览器抓取网页的时候,从来都不是把所有的网页都抓取下来

  浏览器抓取网页的时候,从来都不是把所有的网页都抓取下来,而是只抓取自己想要的内容。在浏览器中控制台抓取输入框的数据,一般有三种做法。parse,通过javascript去读取javascript中关于网页的内容。acronym和bopool,利用ajax,就可以在不用到网页内容的情况下,控制网页的输入内容。

  parse:parse方法主要会返回一个json对象。如果json对象内容是文本,就会转换成一个json字符串,如果json对象内容是链接,会转换成一个json对象。bopool:json也是可以自己通过ajax(异步请求)实现的。parse方法和bopool方法相对来说比较简单,而且ajax也是可以自己通过ajax去请求网页的内容。

  

  一种是parse,一种是bopool。那么问题来了,ajax是如何请求json的呢?两种方法:分别是eval和parse。eval()中,eval()直接创建一个javascript对象,里面包含了该请求网页的所有内容。eval()的实现思路如下:。

  1、把要请求的javascript内容,全部转换成纯文本。

  2、给纯文本的每一个字符串重新赋值一个类似"\0x00"或者"\00a"之类的符号。

  

  3、把转换过的javascript值用'\0'符号连接起来。

  4、编码转换过程中失败,会把结果直接作为参数发送给request,返回一个json对象。parse()方法就是返回一个json对象。parse()不能带参数,传入值会报错。eval()依然也不能加参数,json对象本身可以作为参数。如果需要加一个参数,就是eval("p"),eval()创建一个字符串。

  parse()方法也不能带参数,json对象本身也可以作为参数。然后我们再来看一下scrapy中parse_json的源码实现。scrapy中parse_json实现:它在每次请求网页时,初始化一个evalbody类,作为parse方法的第一个参数传入。evalbody类拥有parse_json函数和bopool函数两个抽象类,其中,parse_json函数的第一个参数是json格式的一个object对象,bopool函数的第一个参数是一个json对象(也可以是jsonstring对象)。

  parse_json会调用json格式的object对象中的parse()方法完成json格式解析,bopool不会管,直接返回一个json对象。然后我们post一个简单的http请求:./json.parse({"user_name":"cvtulsn","password":"12345678"})效果如下:它其实是利用bopool实现的!在bopool方法中使用evalbody类和parsejson类完成了json格式的解析:json类解析一个json对象实际上是通过bopool实现的。bopool属于纯函数,而且带有参数。所以,可以通过bopool添加一个参数。evalbody类中。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线