Python抓取网页中的动态序列化数据

本文介绍了如何使用Python抓取依赖Ajax和JS动态加载的网页数据。通过Ajax实例展示了如何解析动态内容,解释了渲染引擎的工作流程,并提供了JS页面解析的相关知识。同时,文中提及了自建渲染引擎的复杂性,并分享了完整代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python抓取网页中的动态序列化数据
动态序列化数据经常应用于前后端分离的页面、或者通过VUE、JS等HTML页面环境,常规的爬虫抓取方法并不能满足数据采集的要求,因此需要其他的方式进行数据的采集。

这里介绍的2个实例仅限于基础内容的演示,考虑到爬虫效率的问题都会使用不同的爬虫框架来规划爬虫的项目。

Ajax 实例

Ajax页面解析
现在越来越多的网页的原始HTML文档不包括任何数据,而是采用Ajax统一加载。发送Ajax请求道网页更新的过程:

  • 发送请求。
  • 解析内容。
  • 渲染网页。

打开浏览器的开发者工具,到 Networkk 选项卡,使用 XHR 过滤工具。需要按照对应 all_config_file.py 文件建立对应相应文件夹修改该配置并且开启相关服务。
打开浏览器的开发者工具,到 Networkk 选项卡,使用 XHR 过滤工具。需要按照对应 all_config_file.py 文件建立对应相应文件夹修改该配置并且开启相关服务。

完整代码实例
all_config_file.py 配置文件

# coding=utf-8
__author__ = 'Mr数据杨'
__explain__ = '各目标网站爬虫脚本配置文件'

#加载引用模块
import time
import pymongo
import pandas as pd

def news_page_num():
    page_num=input("输入每个网站页面爬取的页面数:")
    return int(page_num)

def title_error_num():
    title_error_num=input("输入错误标题爬取最大数:")
    return int(title_error_num)

def body_error_num():
    body_error_num=input("输入错误页面爬取最大数:")
    return int(body_error_num)


def mongodb_client():
    # 获取mongoClient对象
    client = pymongo.MongoClient("localhost", 27017)
    # 获取使用的database对象
    db = client.news
    print("加载MongoDB数据库完毕......")
    return db

db=mongodb_client()

def time_today():
    # 全局函数
    time_today = time.strftime('%Y-%m-%d', time.localtime(time.time()))
    print("加载全局日期函数完毕......")
    return time_today


# 错误日志信息
def error_text_title(text,time_today):
    print("加载错误信息日志完毕......")
    with open("logs/" + time_today + " news_title_error.txt", "a") as f:
        f.write(text + '\n')

# 错误日志信息
def error_text_body(text,time_today):
    with open("logs/" + time_today + " news_body_error.txt", "a") as f:
        f.write(text + '\n')

# 找到每个爬取网页的链接
def get_title_links_from_MongoDB(label, type):
    result = []
    for item in db.news_tmp.find({
   'label': label, 'type': type}, {
   'url': 1, '_id': 1}):
        result.append(item)
    result = pd.DataFrame(result, columns=['url', '_id'])
    return result

爬虫主程序

# 加载引用模块
import urllib
import urllib.request
import requests
import datetime
from bs4 import BeautifulSoup
import all_config_file
from all_config_file import error_text_title
from all_config_file import error_text_body
from all_config_file import get_title_links_from_MongoDB

cqcoal = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
print("加载目标网址完毕......")
db = all_config_file.mongodb_client()
time_today = all_config_file.time_today()
def cqcoal_title_start(num):
    def start_type(url, label, typeid, pagenum, type):
        try:
            page_num = 1
            while page_num <= pagenum:
                print("开始爬取:" + url)
                page_num += 1
                user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
                headers = {
   'User-Agent': user_agent}
                req = urllib.request.Request(url, headers=headers)
                response = requests.get(url, headers=headers, timeout=10)
                post_param = {
   'pageNum': pagenum, 'pageSize': '20', 'jsonStr': typeid}
                #             post_param = post_param.format(typeid)
                return_data = requests.post(url, data=post_param, verify=False)
                content = return_data.text
                # print(conten
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值