爬取3499手游网下载地址信息

2023-05-16

爬取3499手游网下载地址信息

爬取游戏的下载地址和信息,爬取的信息存入到数据库中。

1、首先需要安装第三方库

requests,lxml,MySQLdb

2、先创建down_software数据库,创建youxi表

create table down_software.youxi
(
    id                   int auto_increment
        primary key,
    yx_title             varchar(255) null,
    yx_bsc               varchar(255) null,
    yx_os                varchar(255) null,
    yx_type              varchar(255) null,
    comment_str          text         null,
    yx_jietu             text         null,
    yx_down_str          varchar(255) null,
    yx_head_portrait_url varchar(255) null,
    url                  varchar(255) null
)
    engine = MyISAM;

3、要爬取的网站https://www.34347.com,直接贴代码。

import requests
from lxml import etree
import MySQLdb
import time


def mySql(yx_title, yx_bsc, yx_os, yx_type, comment_str, yx_jietu, yx_down_str, yx_head_portrait_url, url):

    # 打开数据库连接
    db = MySQLdb.connect("localhost", "root", "root", "down_software", charset='utf8')

    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    # SQL 插入语句
    sql = """INSERT INTO youxi(yx_title, yx_bsc, yx_os, yx_type, comment_str, yx_jietu, yx_down_str, yx_head_portrait_url, url)
             VALUES ('""" + yx_title + """', '""" + yx_bsc + """', '""" + yx_os + """',' """ + yx_type + """',' """ + comment_str + """',' """ + yx_jietu + """',' """ + yx_down_str + """',' """ + yx_head_portrait_url + """',' """ + url + """')"""

    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # Rollback in case there is any error
       db.rollback()

    # 关闭数据库连接
    db.close()
def down_info(url_i):
    for i in url_i:
        url = 'https://www.34347.com' + i
        h1 = requests.get(url, data=data, headers=headers)
        print(url)
        html_info = etree.HTML(h1.text)
        yx_title = html_info.xpath('/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/dl/dt/h3/text()')  # 游戏名
        if len(yx_title) > 0:
            yx_title = html_info.xpath('/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/dl/dt/h3/text()')[0]  # 游戏名
        else:
            break
        re = check_url(yx_title)
        if len(re) > 0:
            break
        # print(re)
        # exit()
        yx_head_portrait_url = html_info.xpath('/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/div[1]/img/@src')[
            0]  # 头像url

        yx_down = html_info.xpath('/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/dl/dd[3]/a[.]/@href')  # 下载链接

        yx_bsc = html_info.xpath(
            '/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/dl/dd[2]/p[1]/span[.]/em/text()')  # 游戏版本,文件大小,游戏厂商,下载次数

        yx_os = html_info.xpath(
            '/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/dl/dd[2]/p[2]/span[1]/em[.]/text()')  # 游戏平台
        yx_type = html_info.xpath('/html/body/div[1]/div[4]/div[3]/div[1]/div/div[1]/dl/dd[2]/p[2]/span[2]/em/text()')[
            0]  # 游戏类型
        yx_comment = html_info.xpath(
            '/html/body/div[1]/div[4]/div[3]/div[1]/div/div[2]/div[2]/div[1]/div[1]/p[.]/text()')  # 游戏简介
        yx_jietu = html_info.xpath('//*[@id="x_img_viewer"]/div/ul/li[.]/img/@src')  # 游戏截图

        comment_str = ''
        yx_bsc_str = ''
        yx_os_str = ''
        yx_jietu_str = ''
        yx_down_str = ''

        for keyj, j in enumerate(yx_bsc):
            lent1 = len(yx_bsc)
            if lent1 - 1 != keyj:
                yx_bsc_str = yx_bsc_str + j + ','
            else:
                yx_bsc_str = yx_bsc_str + j

        for keyk, k in enumerate(yx_os):
            lent2 = len(yx_os)
            if lent2 - 1 != keyk:
                yx_os_str = yx_os_str + k + ','
            else:
                yx_os_str = yx_os_str + k

        for keyi, i in enumerate(yx_comment):
            lent3 = len(yx_comment)
            if lent3 - 1 != keyi:
                comment_str = comment_str + i + '\n'
            else:
                comment_str = comment_str + i

        for keyn, n in enumerate(yx_jietu):
            lent4 = len(yx_jietu)
            if lent4 - 1 != keyn:
                yx_jietu_str = yx_jietu_str + n + ','
            else:
                yx_jietu_str = yx_jietu_str + n

        for keym, m in enumerate(yx_down):
            lent5 = len(yx_down)
            if lent5 - 1 != keym:
                yx_down_str = yx_down_str + m + ','
            else:
                yx_down_str = yx_down_str + m
        # 存入数据库
        mySql(yx_title, yx_bsc_str, yx_os_str, yx_type, comment_str, yx_jietu_str, yx_down_str, yx_head_portrait_url, i)
        # time.sleep(0.3)

def check_url( result_title):
    # 查询数据库中是否有该名字
    # 打开数据库连接
    db = MySQLdb.connect("localhost", "root", "qinchaowei", "down_software", charset='utf8')

    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    # SQL 查询语句
    sql = """SELECT yx_title FROM youxi  WHERE yx_title = '""" + result_title + """'"""

    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()

    # 关闭数据库连接
    db.close()
    # exit()
    return results


def pageinfo(num):
    for page in range(int(num) + 1):
        page_url = "https://www.34347.com/game/list-" + str(page) + "-0-0-0-0-0-0-0.html"

        s = requests.get(page_url, data=data, headers=headers)

        html = etree.HTML(s.text)
        result_url = html.xpath('/html/body/div[1]/div[4]/div[2]/div[2]/ul/li[.]/h3/a/@href')  # //代表获取子孙节点,*代表获取所有
        result_title = html.xpath('/html/body/div[1]/div[4]/div[2]/div[2]/ul/li[.]/h3/a/text()')  # //代表获取子孙节点,*代表获取所有

        # print(result_url)
        # exit()
        down_info(result_url)

data = {'some': 'data'}
headers = {'content-type': 'application/json',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}

s = requests.get('https://www.34347.com/game/list-0-0-0-0-0-0-0-0.html', data=data, headers=headers)

html = etree.HTML(s.text)
result_title = html.xpath('/html/body/div[1]/div[4]/div[2]/div[2]/ul/li[.]/h3/a/text()')  #//代表获取子孙节点,*代表获取所有
result_url = html.xpath('/html/body/div[1]/div[4]/div[2]/div[2]/ul/li[.]/h3/a/@href')  #//代表获取子孙节点,*代表获取所有

yx_page = html.xpath('/html/body/div[1]/div[4]/div[2]/div[3]/nav/ul/li[.]/a/text()')  # 游戏页数
yx_page.pop()
num = yx_page[len(yx_page)-1]

pageinfo(num)

这便是爬取后的数据,存入到数据库中的
在这里插入图片描述

此代码仅供学习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬取3499手游网下载地址信息 的相关文章

  • 51单片机定时器2用作串口

    使用定时器2用作串口 span class token macro property span class token directive hash span span class token directive keyword defin
  • 二进制的计算(原码、补码以及反码)

    带符号 5 2 0000 0101 gt 5 1000 0010 gt 2 然后两个数据都转为补码进行相加 正数的补码等于原码 负数的补码等于符号位不变 xff0c 剩下的取反加一 算补码的时候符号位不参与计算 0000 0101 43 加
  • iwr6843-ROS构建

    需求 ubuntu 18 04版本 安装ros 安装教程 首先安装必要软件 sudo apt install git curl vim y 设置您的计算机以接受来自 packages ros org 的软件 sudo sh c 39 ech
  • 51nod - 1364 最大字典序排列

    给出一个1至N的排列 xff0c 允许你做不超过K次操作 xff0c 每次操作可以将相邻的两个数交换 xff0c 问能够得到的字典序最大的排列是什么 xff1f 例如 xff1a N 61 5 xff0c 1 2 3 4 5 xff0c k
  • esp8266_贝壳物联_arduino

    功能 接收串口数据 xff0c 将串口数据上报到贝壳物联的数据接口 此处为接收0和1数据 xff0c 上报到贝壳物联 贝壳物联平台通讯协议 ArduinoJson解析 ArduinoJson Assistant非常好用的工具 span cl
  • 简历信息粘贴板

    简历信息粘贴板 gitee链接 x1f602 最近简历投递感觉很麻烦 xff0c 所以想整个这个 xff0c 欢迎体验 有用可以整个 随便也水一个文 xff0c 好久没更了 x1f466 描述 厌倦了麻烦的简历填写了吗 是不是感觉切换查找复
  • Python装饰器简单说明

    Python装饰器 官方定义 装饰器本质上是一个Python函数 其实就是闭包 xff0c 它可以让其他函数在不需要做任何代码变动的前提下增加额外功能 xff0c 装饰器的返回值也是一个函数对象 装饰器用于有以下场景 xff0c 比如 插入
  • cpp装饰器模式

    装饰器模式 结构型模式 xff1a 在不改变现有对象结构的情况下 xff0c 向对象添加新的功能 xff0c 同时不改变其结构 重点在于动态的增加删除功能 xff0c 装饰类和被装饰类独立 xff0c 不会耦合 返回的对象已经不是原来的对象
  • windows新增右键菜单,通过wsl中的vim打开文件

    文章目录 查看wsl打开方式添加右键菜单增加图标效果 非常简单的方式 x1f44d 查看wsl打开方式 可以看到我这里使用ubuntu2004 exe可以打开 添加右键菜单 按下win输入regedit xff0c 在右边选择管理员打开 然
  • iwr6843isk-HARbag

    文章目录 描述说明数据信息使用方法动作类型jumpsquatswavewalkboxingjack iwr6843isk搭建ROS环境雷达配置参数to txt中数据预处理 二阶段滑窗处理 环境 github链接 https gitee co
  • PVE+NUT+群晖等配置

    文章目录 配置文件说明 默认配置 翻译的 ups conf 设置ups通信相关 upsd conf 设置ups客户访问的相关信息 upsd users 设置upsd用户 nut conf nut的配置 主要是模式 xff0c 决定使用哪些文
  • stm32霸道-lvgl移植学习(一)

    文章目录 效果有用链接要求创建工程屏幕驱动以及触屏驱动LVGL PortWidgets demo其它 效果 目前显示驱动显示较慢 xff0c 后续会优化 有用链接 LVGL官网 代码下载 要求 要求最低要求 建议要求架构16 32 64位微
  • E6410安装PVE直通显卡安装LibreELEC系统

    文章目录 查看cpu是否支持直通音频笔记本关盖设定BIOS设定启动内核IOMMU支持添加驱动黑名单绑定核显到vfio模块然后新建一个虚拟机安装LibreELEC注意事项重启 VM 时 GPU 直通失败如果直通后遇到问题了 xff0c 开机出
  • 关于SublimeText3和MinGW安装的一些心得

    本人也是为了学习C 43 43 xff0c 在无意中找到用Sublime Text3和MinGW来进行组合搭建从而完成代码的编译的运行 安装过程期间 xff0c 也出现了一些错误 xff0c 下面就把我的出现的一些错误贴出来 xff0c 看
  • confluence linux 安装教程

    jdk的安装 参考此链接 confluence下载 Confluence官网 linux安装 将下载后的安装包上传到linux系统中 xff0c 并授予权限 xff0c 注意请使用root用户安装 xff0c 否则会出现部分功能无法使用的情
  • Boost库编译指南

    1 Boost 库简介 Boost 是一个开源的 C 43 43 库集合 xff0c 提供了许多高质量的库 xff0c 涵盖了许多不同的领域 xff0c 如智能指针 多线程编程 正则表达式 数学库等等 Boost 的目标是提高 C 43 4
  • 解决Flask中出现的跨域问题has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header...

    今天在用flask做接口进行本地调用测试时发现调用报错 如图所示 解决办法 xff1a 在项目目录打开终端 xff0c 安装以下库 pip install U flask cors 再在代码中插入 CORS app resources 61
  • 【Web笔记】Html学习手册

    HTML简介 HTML是 超文本标记语言 xff08 HyperText Markup Language xff09 的简称 HTML的前世今生 从初期的网络诞生后 xff0c 已经出现了许多HTML版本 版本发布时间HTML1991HTM
  • webrtc-kurento

    WebRTC 呼叫者通过 navigator mediaDevices getUserMedia en US 捕捉本地媒体 呼叫者创建一个RTCPeerConnection 并调用 RTCPeerConnection addTrack 注

随机推荐

  • windows10远程连接centos图像化桌面步骤和遇到的问题

    一 安装配置XRDP 首先需要切换到root用户下 xff1b 1 安装epel库 1 xff09 检测系统是否已经安装epel库 rpm qa grep epel 2 xff09 安装epel库 yum install epel rele
  • linux磁盘分区、挂载、扩容

    1 fdisk l 查看磁盘情况 xff0c 可以看到总共4块磁盘 xff0c sda是系统盘及根目录 xff0c 剩余sdb sdc sdd三块磁盘可用 root 64 openEuler dev fdisk l Disk dev sdd
  • QT 线程之QWaitCondition(深入理解)

    QWaitCondition 允许线程在某些情况发生时唤醒另外的线程 一个或多个线程可以阻塞等待一QWaitCondition 用wakeOne 或wakeAll 设置一个条件 wakeOne 随机唤醒一个 xff0c wakeAll 唤醒
  • Qt QMessageBox使用详解

    本文详细的介绍了QMessageBox控件的各种操作 xff0c 例如 xff1a 消息提示框的使用 判断消息提示框的按钮 标准图标和自定义图标 定时关闭 自定义样式等操作 本文作者原创 xff0c 转载请附上文章出处与本文链接 Qt QM
  • C++ permutation排列算法详解(深入了解,一文学会)

    排列就是一次对对象序列或值序列的重新排列 例如 xff0c ABC 中字符可能的排列是 xff1a 34 ABC 34 34 ACB 34 34 BAC 34 34 BCA 34 34 CAB 34 34 CBA 34 三个不同的字符有 6
  • QT QMenuBra QMenu QAction 菜单栏 操作详解

    本文详细的介绍了QMenuBra QMenu QAction 菜单栏的各种操作 xff0c 例如操作 xff1a 新建界面 加入菜单项 加入子菜单 新建二级子菜单 QAction分隔符 pMenuBar 点击信号 触发信号 设置图标 设置禁
  • 网络编程POSIX规范要求数据类型

    数据类型 说明 来源 int8 t 带符号8位整数 lt sys types h gt uint8 t 无符号8位整数 lt sys types h gt int16 t 带符号16位整数 lt sys types h gt uint16
  • 解决ajax的delete、put方法接受不到参数的问题

    通过修改配置文件来实现Put和Delete请求的参数传递的问题 在web xml中添加如下代码 xff1a lt filter gt lt filter name gt HttpMethodFilter lt filter name gt
  • - Dockerfile 指令、构建过程

    查看Dockerfile中可以使用的全部指令 xff1a lt http docs docker com reference builder gt 制作Docker image 有两种方式 xff1a 一是使用 Docker contain
  • python正则表达式匹配邮箱地址是否合法

    题目 xff1a 1 xff09 请尝试写一个验证Email地址的正则表达式 版本一应该可以验证出类似的Email xff1a someone 64 gmail com bill gates 64 microsoft com 2 xff09
  • 公网IP和内网IP的区别? 什么是127.0.0.1?

    IP地址是设备在网络上的唯一标识符 xff0c 比如无线路由器有两个IP xff0c 公网IP xff08 例如100 78 118 73 连接互联网 xff0c 私有 xff08 内网 xff09 IP xff08 如192 168 1
  • 计算机网络课程设计之Tracert与Ping 程序设计与实现

    一 预备知识 ICMP ICMP的报文是封装在IP数据部分中的 按照我的理解 xff0c ICMP就是在网络层中 xff0c 反馈一些转发 访问等操作时的附带信息 ICMP分为两种 xff0c ICMP差错报告报文 xff08 IP传输时的
  • 计算机网络课程设计之网络聊天程序的设计与实现

    TCP和UDP在接收方的区别 xff08 实际上本实验中用不着 xff09 UDP 协议 User Datagram Protocol 用户数据报协议 xff0c 是一 种保护消息边界的 xff0c 不保障可靠数据的传输 就是指传输协议把数
  • 计算机网络课程设计之嗅探器实现

    资料来源网络 xff0c 侵权请联系删除 原理 简单说明一下什么是网络嗅探器 xff0c 网络嗅探器是一个抓取所有经过网卡数据的软件 xff0c 在一般使用电脑时 xff0c 网卡只接受到发送至本机的数据 xff0c 那是因为这是网卡是非混
  • 牛客网高级项目总结

    1 注册和登陆 登陆和注册成功之后 xff0c 在cookie里添加上token xff0c 另外在数据库中插入包含token userId的表 xff0c 用于登陆状态检验 具体检验是在拦截器上进行 xff0c 拦截器的实现过程 xff1
  • 设计模式

    面向对象设计原则 每个对象是拥有独立责任的抽象体 真正的复用是源代码不做修改 xff0c 编译 43 测试之后就不会再修改 设计原则 1 依赖倒置原则 xff08 DIP xff09 1 xff09 高层模块 xff08 稳定 xff09
  • Redis面试

    1 更新操作 https coolshell cn articles 17416 html 不可以先删除缓存 xff0c 再更新数据库 因为并发操作下 xff0c 一个更新操作删掉了缓存 xff0c 此时一个读操作进来 xff0c 读取了旧
  • 【关系代数习题】纸上得来终觉浅——数据库学习之路(4)

    题A 设有如下所示的关系S S SNAME AGE SEX C C CNAME TEACHER 和SC S C GRADE xff0c 用关系代数表达式表示下列查询语句 xff1a 1 检索 程军 老师所授课程的课程号 C 和课程名 CNA
  • 线程池

    public ThreadPoolExecutor int corePoolSize int maximumPoolSize long keepAliveTime TimeUnit unit BlockingQueue lt Runnabl
  • 爬取3499手游网下载地址信息

    爬取3499手游网下载地址信息 爬取游戏的下载地址和信息 xff0c 爬取的信息存入到数据库中 1 首先需要安装第三方库 requests xff0c lxml xff0c MySQLdb 2 先创建down software数据库 创建y