爬虫入门(三种爬虫模块)

爬取百度实时热点排行榜(lxml 模块中的 XPath 解析器)

案例1

  1. 爬虫技术要求: 使用网络请求模块 requestslxml 模块中的 XPath 解析器,爬取百度实时热点排行榜(网址:https://top.baidu.com/board?tab=realtime
  2. 爬虫设计方案: (1)使用 requests.get(url) 函数向服务器提交请求;
    (2)然后将响应的网页信息交给 lxml 库解析,获取自己想要的内容;
    (3)最后使用 open() 函数将爬取的数据写入 TXT 文件。

知识点

Lxml表达式描述
Nodename选取此节点的所有子节点
//从当前节点选取子孙节点
/从当前节点选取子节点
.选取当前节点
选取当前节点的父节点
@选取属性
*选取所有节点

存储

如果想要简单地进行 TXT 文件存储工作,可以通过open() 函数操作文件实现,即需要先创建或者打开指定的文件并创建文件对象。open() 函数的基本语法格式如下: file = open(filename[,mode[,buffering]])

说明注意
r以只读模式打开文件。文件的指针将会放在文件的开头文件必须存在
rb以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头,一般用于非文本文件,如图片、声音等文件必须存在
r+打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖)文件必须存在
rb+以二进制格式打开文件,并且采用读写模式。文件的指针将会放在文件的开头,一般用于非文本文件,如图片、声音等文件必须存在
w以只写模式打开文件文件存在,则将其覆盖,否则创建新文件
wb以二进制格式打开文件,并且采用只写模式。一般用于非文本文件,如图片、声音等文件存在,则将其覆盖,否则创建新文件
w+打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限文件存在,则将其覆盖,否则创建新文件
wb+以二进制格式打开文件,并且采用读写模式。一般用于非文本文件,如图片、声音等文件存在,则将其覆盖,否则创建新文件
a以追加模式打开一个文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
ab+以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
a+以读写模式打开文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写
ab+以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写

mode:可选参数,用于指定文件的打开模式。其参数值如下表所示。默认的打开模式为只读(即 r)。

etree主要函数

主要函数作用
etree.HTML()解析字符串格式的HTML文档对象,将字符串参数变为Element对象,以便使用xpath()等方法;
etree.tostring()将Element对象转换成字符串;
etree.fromstring()将字符串转换成Element对象。

实现代码

import requests
from lxml import etree

records = []
# 处理字符串中的空白符,并拼接字符串
def processing(strs):
    s = ''  # 定义保存内容的字符串
    for n in strs:
        n = ''.join(n.split())# 去除空白符
        s = s + n  # 拼接字符串
    return s  # 返回拼接后的字符串

# 定义解析页面函数,用来获取百度实时热点排行榜信息
def get_hotspot_info(url, headers):

    response = requests.get(url=url,headers=headers)  # 发送网络请求
    html = etree.HTML(response.text)  # 解析HTML字符串
    div_all = html.xpath('//div[@class="category-wrap_iQLoo horizontal_1eKyQ"]')  # 获取实时热点相关所有信息
    # print(div_all)
    for div in div_all:

        rank = div.xpath('a/div[1]/text()')[0] # 获取实时热点排名
        rank = processing(rank)  # 处理实时热点排名
        # //*[@id="sanRoot"]/main/div[2]/div/div[2]/div[1]/div[2]/a/div[1]
        # //*[@id="sanRoot"]/main/div[2]/div/div[2]/div[2]/div[2]/a/div[1]
        # //*[@id="sanRoot"]/main/div[2]/div/div[2]/div[3]/div[2]/a/div[1]
        title = div.xpath('div[2]/a/div[1]/text()')[0]  # 获取实时热点标题
        title = processing(title)  # 处理实时热点标题
        # //*[@id="sanRoot"]/main/div[2]/div/div[2]/div[2]/div[1]/div[2]
        index =  div.xpath('div[1]/div[2]/text()')[0]  # 获取实时热点热搜指数
        index = processing(index)  # 处理实时热点热搜指数
        record = rank + '\t' + title + '\t' + index  # 拼接百度实时热点排行榜信息
        # print(record)  # 输出
        records.append(record)
    return records
def save_as_txt(records):
    for item in records:
        with open('D:/李诗浩/实例/实例/爬虫/request_anli/baiduredain.txt','a',encoding='utf-8') as data:
            data.write(item + '\n')

# 程序入口
if __name__ == '__main__':
    url = 'https://top.baidu.com/board?tab=realtime'  # 百度实时热点排行榜链接
    headers={
        'Cookie':'BAIDUID=BFA84A2CB58B9C52A8354081CEF8173D:FG=1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
    }
    records=get_hotspot_info(url, headers)
    save_as_txt(records)

爬取网易新闻热点排行Top10(正则表达式re 模块)

案例2

在这里插入图片描述

  1. 爬虫爬取的内容:网易新闻热点排行榜的排名、标题、跟帖数和链接。
  2. 爬虫技术要求:使用网络请求模块 requests bs4 模块中的 BeautifulSoup 模块 解析网页数据,获取网易新闻热点排行榜的排名、标题、跟帖数和链接(爬取页面的url:https://news.163.com/)。最后使用 pandas 模块 保存数据,并生成 CSV 文件。

知识点

BeautifulSoup对象功能
Tag使用BeautifulSoup构造方法获取到文档对象之后,Tag对象可以看作HTML中的标签对象,可以使用.操作符获取,获取到Tag对象后可以获取对应HTML标签的属性,使用类似字典的操作方法获取。
NavigableString字符串常被包含在标签(Tag)内,NavigableString类用来包装Tag中的字符串。获取到Tag对象后,使用.string即可获取到标签内的字符串。
BeautifulSoupBeautifulSoup对象表示的是一个文档的全部内容,大部分时候可以把它看作Tag对象,支持遍历文档树中的大部分方法,它的name属性有一个特殊值document。
CommentComment对象是一个特殊的NavigableString对象,表示注释内容。
  1. 遍历搜索文档(find()方法与find_all())
    find()方法与find_all()使用方法相似,唯一区别是find_all()方法返回的结果是一个列表,而find()方法只返回搜索到的第一个结果。find_all()方法找不到目标时返回空列表,find()方法找不到目标时返回None。
    例如:
    查找id为link2的标签,查找所有类名为sister的a标签
    soup.find_all(id=“link2”),soup.find_all(“a”,class_=“sister”)

  2. 获取标签内容

标签作用
get用来获取HTML或XML文档中所有的文本内容,即去除HTML或XML标签后的纯文本,获取标签的属性值例如href,name等
.text获取标签内的文本

实现代码

import requests
import pandas as pd
from  bs4 import BeautifulSoup
def get_news_info(url, headers):
    response = requests.get(url=url,headers=headers)  # 发送网络请求
    soup =  BeautifulSoup(response.text, features="lxml")  # 创建一个BeautifulSoup对象,获取页面正文
    all_news = soup.find('div','mt35 mod_hot_rank clearfix').find('ul').find_all('li')  # 获取网易新闻热点排行Top10内容
    # print(all_news)
    news_list = []  # 创建空列表
    for news in all_news:
        news_rank = news.find('em').text # 获取新闻排名
        news_title = news.find('a').get('title')  # 获取新闻标题
        posts_num = news.find('span').text  # 获取新闻跟帖数
        news_url = news.find('a').get('href')  # 获取新闻链接
        news_list.append([news_rank,news_title,posts_num,news_url])  # 把每条新闻的排名、标题、跟帖数和链接添加到一个列表中,再追加到一个大列表中
    return news_list  # 返回列表

def save_as_csv(news_list):
    data=pd.DataFrame(data=news_list,index=None,columns=None)
    data.to_csv('网易新闻热点排行Top10.csv')
# 程序入口
if __name__ == '__main__':
    url = 'https://news.163.com/'  # 网易新闻首页链接
    # 定义请求头信息
    headers = {
        'Cookie':'_ntes_nuid=a15db63e5c12047a2748a03bc77ca4d8; ne_analysis_trace_id=1685775934666; _antanalysis_s_id=1685775935244; vinfo_n_f_l_n3=019bfc077250a148.1.1.1685775934673.1685776866850.1685788791418; s_n_f_l_n3=019bfc077250a1481685788791418',
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/71.0.3578.80 Chrome/71.0.3578.80 Safari/537.36'
    }
    news_list = get_news_info(url=url,headers=headers)  # 调用爬虫方法,获取网易新闻热点排行Top10
    # print(news_list)  # 输出网易新闻热点排行Top10信息
    save_as_csv(news_list)

爬取百度贴吧指定吧帖子内容(findall 函数解析)

案例3

在这里插入图片描述

  1. 爬取内容 :
    爬取百度贴吧“police”吧前5页所有帖子的标题、作者、链接和创建时间。
  2. 要求:
    使用网络请求模块 requests 与正则表达式re 模块提取百度贴吧“police”吧 HTML 代码信息(网址:https://tieba.baidu.com/f?kw=police&ie=utf-8&pn=0)。
  3. 爬虫设计方案:
    (1)使用requests.get(url) 函数向服务器提交请求;
    (2)然后将响应的网页信息交给re模块解析,从 HTML 代码中提取出帖子的标题、作者、链接和创建时间;
    (3)最后使用open() 函数将爬取的数据写入 txt 文件。

知识点

  1. 正则表达式模块 re 简介
    正则表达式是一个特殊的字符序列,它能帮助用户便捷地检查一个字符串是否与某种模式匹配。在爬虫中,我们经常会使用它从抓取到的网页源码或接口返回内容中,匹配提取我们想要的数据。
    正则表达式由元字符及其不同组合来构成,通过巧妙地构造正则表达式可以匹配任意字符串,并完成复杂的字符串处理任务。
元字符功能说明
.匹配除换行符"\n"以外的任意单个字符
*匹配前面的字符0次或多次
+匹配前面的字符1次或多次
?匹配前面的字符0次或1次
^匹配字符串开头,在多行模式中匹配每一行的开头
$匹配字符串末尾,在多行模式中匹配每一行的末尾
\转义字符,使后一个字符改变原来的意思
{}按{}中的次数进行匹配。{m}表示匹配前一个字符m次;{m,n}表示匹配前一个字符m至n次,若省略n,则匹配m至无限次
[]匹配位于[]中的任意一个字符。字符集,对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义
()将位于()内的内容作为一个整体来对待
  1. 特殊表达式
特殊表达式序列功能说明
\f换页符匹配
\n换行符匹配
\r匹配一个回车符
\d匹配任何数字,相当于[0-9]
\D与\d含义相反,等效于[^0-9]
\s匹配任何空白字符,包括空格、制表符、换页符,与[\f\n\r\t\v]等效
\S与\s含义相反,匹配任何非空白字符,相当于[^\f\n\r\t\v]
\w匹配任何字母、数字以及下划线,相当于[a-zA-Z0-9_]
\W与\w含义相反,与[^a-zA-Z0-9_]等效
\b匹配单词头或单词尾,单词的分界符通常是空格、标点符号或者换行
\B与\b含义相反
\A仅匹配字符串开头,同^
\Z仅匹配字符串结尾,同$
  1. findall 函数解析

    re 模块中的 findall() 函数用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。语法格式如下:
    re.findall(pattern, string, [flags])

参数说明:
pattern:正则中的模式字符串,由要匹配的正则表达式转换而来。
string:表示要匹配的字符串。
flags:可选参数,表示标志位,用于控制匹配方式,比如:是否区分字母大小写。

  1. 常用标志
标志说明
A对于\w、\W、\b、\B、\d、\D、\s和\S只进行ASCII匹配
I执行不区分字母大小写的匹配
M将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处)
S使用(.)字符匹配所有字符,包括换行符
X忽略模式字符串中未转义的空格和注释
  1. 返回值
    (1) 如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。
    在 get_posts_info() 函数 中使用 zip() 函数将帖子数据打包成元组组成的列表并返回给调用端。
    (2)创建写入文件函数 save_as_txt(),将爬取的百度贴吧“police吧”帖子内容写入本地 TXT 文件。在该函数中首先通过 open() 函数创建 open 对象,以追加模式打开文件,编码为“utf-8”。然后循环遍历列表,得到包含帖子内容的元组。之后,使用下标索引访问元组的值,将’https://tieba.baidu.com/p/’ 与得到的值进行拼接,组成完成的 URL 链接。最后通过write() 函数 将爬取的每条帖子信息写入文件并在结尾换行,要求字段分隔符为“\t”。
    (3)在主函数中调用 save_as_txt() 函数将爬取的百度贴吧“police吧”帖子内容写入 本地存储路径 文件。

实现代码

import requests
import re
result=[]
# 请求页面的函数
def get_page(url):
    # 定义请求头信息
    headers = {
        'Cookie':'BAIDUID=20E0391EF8573978D496A1E0EAB047ED:FG=1; BAIDUID_BFESS=20E0391EF8573978D496A1E0EAB047ED:FG=1; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1685866436; BAIDU_WISE_UID=wapp_1685866436363_311; USER_JUMP=-1; ZFY=RV:B2eSwVmkgGJcb2NNH1:BN1raWidrw6rxMAhU2x4Nto:C; arialoadData=false; video_bubble0=1; tb_as_data=8c7a399bddbfdc81784b67f57cfced9153a4b64ba213cb6e80baf65da7eda3ad34295fb7987d9a83f2f282287d9bbc052e31eeb97d693ce715b4023d9a0430b65a50ae35d918bcc116cf4bb86109015bf0671dc8c693c93f4f122481710b422f9570a7bc086ad87270ce67b85af41596; Hm_lpvt_98b9d8c2fd6608d564bf2ac2ae642948=1685876626; XFI=79dfed90-02c7-11ee-8312-b19133ac2735; BA_HECTOR=8g0k2g80ag018l210kag0l9n1i7orsi1m; XFCS=BCFA8610CE0610F2F12F246B055E16C3996D79054370E8F2D2998E3A157C976C; XFT=EWOaQ3SZBJVWDN17Za2IFrooXhLrbqCBrMl8RBliEkc=; RT="z=1&dm=baidu.com&si=281bcc38-1e6f-455f-90cc-142415cf7577&ss=lihbbgkx&sl=7&tt=c4q&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=4d8o&ul=4f4t"',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)  # 发送网络请求
    return response.text  # 以文本形式返回整个HTML页面
# 定义解析贴吧网页的爬虫函数,用来获取"police吧"帖子标题、作者、链接和创建时间
def get_posts_info(html):
    posts_title = re.findall(r'title="(.*)" target="_blank" class="j_th_tit ',html)  # 帖子标题
    posts_author = re.findall(r'title="主题作者:(.*)"',html)  # 帖子作者
    posts_href = re.findall(r'href="(/p/\d{10})"', html)  # 帖子链接
    post_createtime = re.findall(r'title="创建时间">(\d{4}-\d{2})<',html)  # 帖子创建时间
    # print('帖子标题:', posts_title)
    # print('帖子作者:', posts_author)
    # print('帖子链接:', posts_href)
    # print('帖子创建时间:', post_createtime)
    msg=list(zip(posts_title,posts_author,posts_href,post_createtime))
    return msg
# 程序入口

def save_as_txt(result):
    for items in result:
        for item in items:
            with open('D:/李诗浩/实例/实例/爬虫/request_anli/baidutieba.txt', 'a', encoding='utf-8') as data:
                for i in range(4):
                    data.write(item[0] + '\t')
                    data.write(item[1] + '\t')
                    data.write('https://tieba.baidu.com' + item[2] + '\t')
                    data.write(item[3] + '\t')
                data.write('\n')
if __name__ == '__main__':
    base_url = 'https://tieba.baidu.com/f?kw=police&ie=utf-8&pn={}'  # "police吧"基础URL地址
    for i in range(0, 201, 50):  # 每页间隔50,实现循环,共5页
        page_url = base_url.format(i)  # 通过format替换切换页码的URL地址
        # print(page_url)
        html = get_page(page_url)# 调用请求页面的函数,获取整个HTML页面
        # print(html)
        posts_data = get_posts_info(html)  # 调用解析贴吧网页的爬虫函数,获取"police"贴吧帖子标题、作者、链接和创建时间
        result.append(posts_data)
    for msg in result:
        print(msg)
    save_as_txt(result)

论坛话题前200条(parsel)

案例4

  1. 爬虫技术要求
    使用网络请求模块 requestsparsel模块,爬取论坛话题前200条
  2. 爬虫设计方案:
    将数据完整爬下来命令为data,列名依次为username、reply、view、like将数据导入自己的mysql数据库中
    (网址:https://forum.90sec.com/

知识点

CSS选择器
无论是使用css选择器,还是xpath,re,都需要先创建一个parsel.Selector对象
将css()函数查询到的结果转换为字符串或者列表

get()将css() 查询到的第一个结果转换为str类型
getall()将css() 查询到的结果转换为python的列表

css选择器

html = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标签选择器</title>
</head>

<body>
    <p>css标签选择器的介绍</p>
    <p class='p'>标签选择器、类选择器、ID选择器</p>
    
    <a href="https://www.baidu.com" title="百度搜索">百度一下</a>
    
    <span> 我是一个span标签</span>
    
    <div id="map">
        <p class="content">早上祝您端午节快乐!</p>
    </div>
    
    <span id="map">
        <p class="content">晚上祝您端午节快乐!</p>
    </span>
    <span id="text">你好,我是一行文字</span>
</body>

</html>
"""

选择器使用
标签选择器选取所有的p标签:
p_tags = selector.css(‘p’)
class选择器选择所有class为content的标签:
tags = selector.css(‘.content’)
id选择器选取id为text的所有标签:
text = selector.css(‘#text’)
属性提取器分别提取a标签中的href和title属性值:
href_value = selector.css(‘a::attr(href)’).get()
title_value = selector.css(‘a::attr(title)’).get()
属性选择器提取文字:
string = selector.css(‘#text::text’).get()
类选择器和id选择器搭配使用id为map的标签内的p标签,且p标签的class为content,提取出该标签的文字:
content = selector.css(‘#map p.content::text’).getall()
子选择器和子孙选择器map > p 是选择 id为map 的标签儿子标签的 p标签,只检测 id为map 的标签内的第一层
map p 是选择 id为map 的标签所有子孙标签中的p标签,检测 id为map 的标签内的所有标签

代码实现

# coding:utf-8
# @Time     :2023/5/31 19:28
# @Author   :moxiao
import requests     # 发送请求
import parsel
import pymysql

result=[]
likes= []
headers = {
    'Cookie':'_forum_session=ILJoes9uNuh8LIPgh2aGvt2W%2Fz2lnT3OFI09Xx4mDmXXqOn%2B2RfM5tMic2kKrljNBGbLMr1BG4G%2B%2BYpkzSJhtRLNwks25Jy98kZr66M%2Bx7ETGKUrjcsz2UU0OCOFAvfAMYNU5nIa8Z4WDIU7a%2BqvL3fgJPSV2oytmvqG3dDYcc8whyNycRz5v%2BHEsDqDwvMYaIqoFrPVJ4xizzQm9HNHVM%2B%2BF8TTNAO4c8KR1fP%2BLFjoNXPvTdj3OU3r8oh31vfa6C2wGiH1snj8yt36PZ73THk70AAynEiWuWyBmnfcuIbibMjWZkPUGhR6ascssnNdVt4hfIEl35MJnSyCtH0qVTY1Cb%2BQLUkIatyI%2FvaXFwRtOEf7npLV2RWI3RAk93UxsXP4VEifZHuvEzZtJ%2BjXaXr5SPqTcWCSlAgvjSjFr%2BeGz6%2BxweSKmwATpiPwwAauh18aAVX6LvRnNW7VaFO9hTNfF03IuI527c%2FqLTTloNWamltsPbYHuP3r8Ka1a62yrut7%2BZuAcYNSM9ANjXiyUuX3L5Av8mFb9wOxFGljbtq0RLxvAoQybR7H4NVTYi1w%2Bj3%2BZ3SnJVeGEhsrmr%2FcYaGBBcfRdcqrJrV4rGc09de7qUb6R0PE6Y9SmhWMnsFLZwD1rK85eOpdG%2F65YayReBGWCFeP0uPBIxNgRCZ3CE4ysZ7DLuBLhu7tKmdGfheRajYTRcEChF2HMmHaDK%2F8%2FcO%2BB6qWR19KhFH9eAOo4QKyTdsmsinrrQXICcwR8k67uN4CHmMhQcb08MbHVZ%2BQt19XeMmTCMOxumvWn3FDG0CvO2RcQLnZa0VSg77yxYqpHiElJaDLZEhGiFa0FwNZSlzC5TOUny1Gw59OUkeyQl%2BR%2Bevs6rEgSHiM%2BTBuk4i9iuoMQ1wJatYNDAe%2FRUzcog7Z4afLhXK%2BNn2pY3byJI5ojogZLxs3xnzxZ6rXvEwG8gU%3D--OiQw%2F9S5de49Tr6S--4eZimX4dJI70zvWB4ENPbg%3D%3D; path=/; secure; HttpOnly; SameSite=Lax',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
}
url ='https://forum.90sec.com/'
response = requests.get(url=url, headers=headers)
responses = response.text.encode('utf-8').decode('utf-8')
# print(responses)
selector = parsel.Selector(responses)

author = selector.css('.posters img::attr(title)').getall()#.item-0.active a::attr(href)
replies = selector.css('.replies span::text').getall()
views = selector.css('.views span::text').getall()
links = selector.css('.link-top-line a::attr(href)').getall()
for link in links:
    url1 = link
    print(url1)
    res = requests.get(url=url1, headers=headers)
    res1 = res.text.encode('utf-8').decode('utf-8')
    # print(res1)
    selector = parsel.Selector(res1)
    like = selector.css('.post-likes::text').get()
    likes.append(like)



print("{:^20}{:^10}{:^5}{:^8}".format("作者用户名","回复量","浏览量","点赞量"))
"""测试
# for i in range(25):
#     result.append([author[i], replies[i], views[i], likes])
# for a in range(25):
#     u=result[a]
#     print("{:^20}{:^10}{:^5}{:^8}".format(u[0],u[1],u[2],u[3]))
"""
conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='root123',
        database='test',
        port=3306,
        charset='utf8')
# 建立游标
cursor = conn.cursor()
# (1)定义一个格式化的sql语句
sql = 'insert into qiushibaike(`username`,`reply`,`view`,`like`) values(%s,%s,%s,%s);'
for i in range(25):
    result.append((author[i], replies[i], views[i], likes[i]))
for a in range(25):
    u=result[a]
    cursor.execute(sql, u)
conn.commit()
cursor.close()
# 关闭连接
conn.close()
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值