美文网首页
一次爬取腾讯云社区文章的经历分享

一次爬取腾讯云社区文章的经历分享

作者: JakietYu | 来源:发表于2020-03-11 18:07 被阅读0次

    最近学了一些Python爬虫,很多网站爬取还是非常简单的,比如第二页的链接中基本会出现page=2,这样的网站爬起来非常方便。但是,有的网站比如接下来要将的腾讯云社区,对于爬虫做了一些防护。下面,我来分享一下我的爬取腾讯云社区内容的探索经历。

    分析

    首先输入搜索Python后,拉到页面最下,可以看到“点击加载更多按钮”。


    search_py

    在检查界面的network中,我们可以看到他发送了/search?action=SearchList这个链接。


    检查界面一
    打开这个链接后,我们能在preview中找到下一页的内容,那么基本就确立了这个链接的内容就是我们需要的。
    检查界面2

    但是这个链接无论是第几页都是这个,因而猜测某些页码信息隐藏在Headers中,经过一番寻找,终于在Payload找到了一些属性。


    payload属性
    我们可以猜测pageNumber属性就是页码数,q属性就是代表搜索的内容。因而我用python尝试了一下,将pageNumber改成3,q改成python3,拿到的就是搜索python3的第三页内容。最终假设成立,就需要开始干活了。

    添加Payload信息

    直接添加payload属性,

    payload = {"action": "SearchList", "payload": {"pageNumber": i, "q": "python", "searchTab": "article"}}
    

    在post中添加json=payload。

    html = requests.post(url=url, json=payload, headers=headers).content.decode("utf-8","ignore")
    

    写入数据库(可以跳过)

    由于搜索到的数据量非常大,因而为了方便之后的查看,我将其写入了数据库。当然,你不会数据库的话可以生成csv文件,这里仅提供写入数据库的方法。如果你的电脑没有安装数据库,我这提供一个非常简单的安装方法,使用phpstudy。


    phpstudy

    安装后可以启动WNMP环境,然后可以使用phpmyadmin查看编辑数据库。在里面新建cloud_tecent数据库,然后在其中新建article数据表。
    最后调用pymysql模块编辑数据库

    # 连接本地数据库cloud_tecent
    connectSql = pymysql.connect(host="127.0.0.1", user="root", passwd="321369", db="cloud_tecent")
    for j in range(0,len(title),2):
        title1 = str(title[j])
        #去除标题中<em>和</em>
        title2 = title1.replace("<em>", "")
        title2 = title2.replace("</em>", "")
        link1 = "/developer/article/"+link[j]
        m = int(j/2)
        comment1 = comment[m]
        # 写入数据表 title link comment
        sql = "insert into article(title,link,comment) value('"+title2+"','"+link1+"','"+comment1+"')"
        connectSql.query(sql)
        connectSql.commit()
    

    全部代码

    import json
    import pymysql
    import re
    import requests
    def get_cloudtecent(i):
        url = 'https://cloud.tencent.com/developer/services/ajax/search?action=SearchList'
        headers = {
            'Content-Type': 'application/json;charset=UTF-8',
            'Cookie': '请填入你的cookie',
            'Referer': 'https://cloud.tencent.com/developer/search/article-python',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
            'accept-language': 'zh - CN, zh;q = 0.9',
            'accept': 'application/json, text/plain, */*'
        }
        payload = {"action": "SearchList", "payload": {"pageNumber": i, "q": "python", "searchTab": "article"}}
    
        html = requests.post(url=url, json=payload, headers=headers).content.decode("utf-8","ignore")
        print(html)
        title = re.compile('"article":{"id":.*?"articleId":.*?"title":"(.*?)"',re.S).findall(html)
        # 测试的时候输出这三个值验证正则表达式
        #print(title)
        link = re.compile('"articleId":(.*?),',re.S).findall(html)
        #print(link)
        comment = re.compile('"summary":"(.*?)"',re.S).findall(html)
        #print(comment)
        # 连接本地数据库cloud_tecent
        connectSql = pymysql.connect(host="127.0.0.1", user="root", passwd="321369", db="cloud_tecent")
        for j in range(0,len(title),2):
            title1 = str(title[j])
            #去除标题中<em>和</em>
            title2 = title1.replace("<em>", "")
            title2 = title2.replace("</em>", "")
            link1 = "/developer/article/"+link[j]
            m = int(j/2)
            comment1 = comment[m]
            # 写入数据表 title link comment
            sql = "insert into article(title,link,comment) value('"+title2+"','"+link1+"','"+comment1+"')"
            connectSql.query(sql)
            connectSql.commit()
    # 爬前五页
    for i in range(1,5):
        get_cloudtecent(i)
    

    结果

    最终结果

    相关文章

      网友评论

          本文标题:一次爬取腾讯云社区文章的经历分享

          本文链接:https://www.haomeiwen.com/subject/wijhjhtx.html