zoukankan      html  css  js  c++  java
  • 团队冲刺阶段二(6)

      爬取到了帖子的标题,还要对帖子的评论进行爬取,这其中就会有更多的服务器访问,因此出现反爬虫设定的概率就更大了,因此决定控制过一段时间进行一次爬虫,每个帖子不要爬取过多的内容,以此来保证可以让数据库不会太缺少内容。

    应对爬虫出现问题的方法,因为解决不了验证,只能每次爬取少量内容,给程序设置了一个定时器,每经过20分钟运行以此,以此来防止验证出现频繁。

    代码如下:

    import pymysql
    import requests
    import re
    import time
    db = pymysql.connect(host="localhost", user="root", passwd="", database="tbpy", charset='utf8mb4')
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"
    }
    cursor = db.cursor()
    sql = 'select id from total order by looknum desc limit 115,99999999'
    cursor.execute(sql)
    results = cursor.fetchall() #用于返回多条数据
    print(results)

    def getpinglun(resul):
    user = []
    totalll=115
    numm=0
    for w in resul:
    pUrl = "https://tieba.baidu.com"+w[0]
    # print(pUrl)
    res2 = requests.get(pUrl).text
    # getP = re.compile(r'<a style="" target="_blank" class="p_author_face " href="(.*?)"><img username=".*?" class="" src="(.*?)"/></a>')
    getT = re.compile(r'<a style="" target="_blank" class="p_author_face " href="(.*?)"><img username=".*?" class="".*?"(//himg.bdimg.com/sys/portrait/item/.*?)".*?/></a>.*?class="p_author_name j_user_card" href=".*?" target="_blank">(.*?)<.*?class="d_post_content j_d_post_content clearfix" style="display:;"> (.*?)<', re.DOTALL)
    getPage = re.compile(r'<span class="red">(.*?)</span>页')
    keyPage = re.findall(getPage, res2)
    # keyP = re.findall(getP, res2)
    # user.append([keyP[0][0], keyP[0][1]])
    page = keyPage[0]
    if(int(page)>5):
    page=5
    else :
    page=page
    print(int(page))
    for a in range(int(page)):
    pageUrl = pUrl+"?pn="+str(a+1)
    print(pageUrl)
    res3 = requests.get(pageUrl).text.replace("<br>", "")
    keyT = re.findall(getT, res3)
    print(keyT) # 评论人名 链接 头像 评论 0=链接 1=头像 2=昵称 3=评论
    user.append(keyT)
    for info in keyT:
    va = []
    va.append(w[0])
    va.append(info[2])
    va.append(info[0])
    va.append(info[1])
    va.append(info[3])
    sql1="insert into plinfo (id,plname,peohref,peoimg,plneirong) values(%s,%s,%s,%s,%s) "
    cursor.execute(sql1, va)
    db.commit()
    totalll=totalll+1
    jieguo="已经爬取完了第"+str(totalll)+"条数据"
    print(jieguo)
    numm=numm+1
    if(numm==5):
    time.sleep(1800)
    numm=0
    if __name__ == '__main__':
    getpinglun(results)
  • 相关阅读:
    编译型语言和解释性语言
    2.变量和基本类型——2.2变量
    2.变量和基本类型——2.1基本内置类型
    1.开始
    机器学习基础—集成学习Bagging 和 Boosting
    C++多态?
    python dataframe数据条件筛选
    UDA机器学习基础—评估指标
    MFC 树形控件
    MFC 列表控件List Control
  • 原文地址:https://www.cnblogs.com/ruangongwangxiansheng/p/14914646.html
Copyright © 2011-2022 走看看