zoukankan      html  css  js  c++  java
  • 数据爬取

    首次接触爬取数据,跟着网上的教程安装了pychram,学习了基本的爬取操作。

    复制代码
    from os import path
    import requests
    from bs4 import BeautifulSoup
    import json
    import pymysql
    import numpy as np
    import time
    #请求地址
    url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia?from=timeline&isappinstalled=0'
    #为了避免反爬,伪装成浏览器:
    #创建头部信息
    headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
    response =  requests.get(url,headers = headers)  #发送网络请求
    #print(response.content.decode('utf-8'))#以字节流形式打印网页源码
    content = response.content.decode('utf-8')
    #print(content)
    soup = BeautifulSoup(content, 'html.parser')#指定Beautiful的解析器为“html.parser”
    '''*find()
    返回的是第一个匹配的标签结果
    *find_all()
    返回的是所有匹配结果的列表'''
    #世界确诊
    listB = soup.find_all(name='script',attrs={"id":"getListByCountryTypeService2true"})
    account = str(listB)#转化成字符串
    #print(account)
    messages = account[95:-21]#截取从52到后边倒数21个
    print(messages)
    messages_json = json.loads(messages)#json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
    print(messages_json)
    valuesList = []
    cityList = []
    con=len(messages_json)#Python len() 方法返回对象(字符、列表、元组等)长度或项目个数
    k=0
    for i in range(len(messages_json)):#从0到len
        k=k+1#time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))格式化当前时间
        value = (k,time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),messages_json[i].get('provinceName'),None,messages_json[i].get('confirmedCount'),messages_json[i].get('suspectedCount'),messages_json[i].get('curedCount'),messages_json[i].get('deadCount'),messages_json[i].get('locationId'))
        valuesList.append(value)#进行添加到list中
    #数据库的写入
    #打开数据库连接
    db = pymysql.connect("localhost", "root", "123", "payiqing", charset='utf8')
    #使用此方法获取操作游标
    cursor = db.cursor()
    
    array = np.asarray(valuesList[0])
    '''DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
    TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 '''
    sql_clean_province = "TRUNCATE TABLE world_map"
    sql = "INSERT INTO world_map values (%s,%s,%s,%s,%s,%s,%s,%s,%s) "
    '''>>>tuple([1,2,3,4])
    (1, 2, 3, 4)
    >>> tuple({1:2,3:4})    #针对字典 会返回字典的key组成的tuple
    (1, 3)
    >>> tuple((1,2,3,4))    #元组会返回元组自身
    (1, 2, 3, 4)'''
    value_tuple = tuple(valuesList)
    
    try:
        cursor.execute(sql_clean_province)
        db.commit()
    except:
        '''    connection.rollback()
    该方法回滚自上一次调用 commit() 以来对数据库所做的更改'''
        print('执行失败,进入回调1')
        db.rollback()
    
    try:
        '''cursor.executemany(sql, seq_of_parameters)
    该例程对 seq_of_parameters 中的所有参数或映射执行一个 SQL 命令。'''
        cursor.executemany(sql, value_tuple)
        '''connection.commit()
    该方法提交当前的事务。如果您未调用该方法,
    那么自您上一次调用 commit() 以来所做的任何动作
    对其他数据库连接来说是不可见的'''
        db.commit()
    except:
        print('执行失败,进入回调3')
        db.rollback()
        '''    connection.close()
    该方法关闭数据库连接。请注意,这不会自动调用 commit()。
    如果您之前未调用 commit() 方法,就直接关闭数据库连接,
    您所做的所有更改将全部丢失!'''
    db.close()
  • 相关阅读:
    ASP.NET 无提示关闭窗口
    C# Winform程序获取外网IP地址
    使用System.Drawing.Printing 画报表。
    C# Winform调用IP地址、手机归属和身份证查询接口
    C# 获取文中文字符首字母
    C# WinForm给Button或其它控件添加快捷键响应
    C# 获取农历日期
    TSQL之插入的内容是查询出的值
    C# 获取中文星期的两种方法
    C#批量操作控件
  • 原文地址:https://www.cnblogs.com/xiangyu721/p/13086534.html
Copyright © 2011-2022 走看看