雪球网爬取数据并存入数据库

创建数据库连接

from urllib import request
import json
import pymysql

class mysql_connect(object):
    # 初始化的构造函数
    def __init__(self):
        self.db = pymysql.connect(host='127.0.0.1',user='root',password='yao123',port=3306,database='pachong')
        self.cursor = self.db.cursor()
    # 执行修改操作
    def mysql_do(self,sql):
        self.cursor.execute(sql)
        self.db.commit()

    # 结束函数
    def __del__(self):
        self.cursor.close()
        self.db.close()

获取并存储数据

url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id={}&count={}&category=111'
# 默认从第一页开始爬取
def xueqiu(number=1,max_id=None,count=None):
    if max_id is None:
        full_url = url.format(-1,10)
    else:
        full_url = url.format(max_id,count)
    count = 15

    headers = {
        'Accept': '*/*',
        # 'Accept-Encoding': 'gzip, deflate, br',
        # 'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive',
        'Cookie': 'device_id=3049fba19293376977728a287084d21f; _ga=GA1.2.780783310.1531212991; s=e212ctwtfc; __utmz=1.1531213044.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=1.780783310.1531212991.1531213044.1531220599.2; aliyungf_tc=AQAAADtGMFhh1gsAUhVFeSfUZkqI1Vuj; xq_a_token=584d0cf8d5a5a9809761f2244d8d272bac729ed4; xq_a_token.sig=x0gT9jm6qnwd-ddLu66T3A8KiVA; xq_r_token=98f278457fc4e1e5eb0846e36a7296e642b8138a; xq_r_token.sig=2Uxv_DgYTcCjz7qx4j570JpNHIs; _gid=GA1.2.1152894742.1534296305; _gat_gtag_UA_16079156_4=1; Hm_lvt_1db88642e346389874251b5a1eded6e3=1534296305; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1534296305; u=211534296306130',
        'Host': 'xueqiu.com',
        'Referer': 'https://xueqiu.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
    }
    # 最大页码数
    if number<=4:

        print('第%d页:'%number)
        number += 1
        req = request.Request(full_url,headers=headers)
        response = request.urlopen(req)
        result = response.read().decode('utf-8')

        # json处理
        j = json.loads(result)
        m = mysql_connect()
        for i in j['list']:
            detail = json.loads(i['data'])

            print(i['id'],detail['title'])
            description = detail['description']
            # 此处sql语句description有特殊字符会转义sql语句,只能传入前几条语句,所以进行为None处理
            sql = 'insert into snowball  values ("{}","{}","{}","{}");'.format(detail['id'],detail['title'],None,detail['target'])
            m.mysql_do(sql)

        print(j['list'][0])
        xueqiu(number,j['list'][-1]['id'],count)


if __name__ == '__main__':
    xueqiu(1,-1,10)

猜你喜欢

转载自blog.csdn.net/qq_41847171/article/details/81711504