前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次爬取腾讯云社区文章的经历分享

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

作者头像
分享者
发布2022-05-17 19:00:23
5210
发布2022-05-17 19:00:23
举报
文章被收录于专栏:JackYu分享者

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

分析

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

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

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

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

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

添加Payload信息

直接添加payload属性,

代码语言:javascript
复制
payload = {"action": "SearchList", "payload": {"pageNumber": i, "q": "python", "searchTab": "article"}}

在post中添加json=payload。

代码语言:javascript
复制
html = requests.post(url=url, json=payload, headers=headers).content.decode("utf-8","ignore")

写入数据库(可以跳过)

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

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

代码语言:javascript
复制
# 连接本地数据库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()

全部代码

代码语言:javascript
复制
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)

结果

最终结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JackYu分享者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析
  • 添加Payload信息
  • 写入数据库(可以跳过)
  • 全部代码
  • 结果
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档