java爬虫抓取动态网页(soup()需要爬取的网站数据及分析方法)

优采云 发布时间: 2021-09-21 14:07

  java爬虫抓取动态网页(soup()需要爬取的网站数据及分析方法)

  参考原文:

  需要爬网的网站数据:共165页,可通过将page=1改为其他数字进行访问

  获取所有URL:URL=(“{}”。范围(1)中的I的格式(I),166))

  使用Firefox浏览器打开要爬网的网页,右键单击查看页面源代码,Ctrl+F查找并输入293。此值在源代码中不存在,表示它是动态加载的数据

  对于动态加载的数据,我熟悉两种方法:一种是使用selenium,另一种是分析网页元素,找出原创网页中的数据,提交表单,并获取不同的数据以达到爬行的目的

  方法1:

  #coding=utf-8

from bs4 import BeautifulSoup

from selenium import webdriver

urls = ('http://gkcx.eol.cn/soudaxue/queryProvince.html?page={}'.format(i) for i in range(1,166))

driver=webdriver.Firefox()

driver.maximize_window()

for url in urls:

#print ("正在访问{}".format(url))

driver.get(url)

data = driver.page_source

soup = BeautifulSoup(data, 'lxml')

grades = soup.find_all('tr')

for grade in grades:

if '' in str(grade):

print(grade.get_text())

  代码说明:

  从BS4导入Beauty soup使用Beauty soup解析网页数据

  从selenium导入webdriver使用selenium抓取动态数据

  URL=('{}'。范围(1)中的i的格式(i),166))收录需要爬网的所有数据的网站*敏*感*词*

  Driver=webdriver.Firefox()打开Firefox浏览器

  Driver.maximize_window()最大化窗口

  driver.get(URL)浏览器会自动跳转到URL链接

  Data=driver.page\u source获取页面元素,其中收录要爬网的数据

  soup=BeautifulSoup(数据'lxml')

  等级=汤。查找所有('tr'))

  按年级划分的年级:

  如果str(年级)中有“”:

  打印(grade.get_text())

  通过分析数据并写出上述搜索方法,您可以获得所有数据

  通过这种方法获取数据简单直观,但缺点是速度太慢

  现在,第二种方法是获取数据

  使用Firefox浏览器打开要爬网的网页,右键单击查看元素,然后选择“网络”。默认情况下,该功能正常

  (一些旧版本的Firefox可能需要安装firebug插件)

  单击第二页以查看加载了哪些页面和数据

  分析如下:

  

  分析表明,JSON类型的列就是我们需要的数据

  在消息头网站中查看请求@

  实际请求网站

  参数mestype=jsonp&callback=jquery3805365803&luqutype3=&province3=&year3=&luqupici3=&page=2&size=10&03

  也可以单击右侧的参数栏以查看参数

  

  Page表示当前的页数

  大小表示每页显示的项目数

  编写代码

  #coding=utf-8

import requests

import json

from prettytable import PrettyTable

if __name__=='__main__':

url = 'https://data-gkcx.eol.cn/soudaxue/queryProvince.html'

row = PrettyTable()

row.field_names = ["地区", "年份", "考生类别", "批次","分数线"]

for i in range(1,34):

data ={"messtype":"json",

"page":i,

"size":50,

"callback":

"jQuery1830426658582613074_1469201131959",

"_":"1469201133189",

}

school_datas = requests.post(url,data = data).json()

datas = school_datas["school"]

for data in datas:

row.add_row((data["province"] ,data["year"],data["bath"],data["type"], data["score"]))

print(row)

  代码描述

  对于范围(1,34):

  共有1644个条目。每页上显示的最大条目数为50,1600/50=32,44个条目为33页,因此范围应为(1,34)

  数据={“messtype”:“json”

  “页面”:我

  “尺寸”:50

  “回调”:

  “jQuery82613074_59”

  ":"89"

  }

  分析提交的数据并使用post方法

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线