专栏首页白玉无冰注意!Cocos 中文论坛域名修改!动态爬取论坛列表!python爬虫入门实战(四)!

注意!Cocos 中文论坛域名修改!动态爬取论坛列表!python爬虫入门实战(四)!

◇ 最近访问 cocos 中文论坛时发现域名修改的通知,顺便提醒一下大伙儿。

不过今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享。(官方不会打我吧

)

配置环境

为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加。

环境: python3 + requests 。还要引入几个系统库。参考如下:

import requests
import json
import csv
from multiprocessing.dummy import Pool

分析网页

以chrome浏览器为例,空白处 右键->检查 进入网页分析模式,选择 Network 中的XHR,滚动条往下滚,观察右侧加载了什么文件。

在网页分享模式下,点击刚才下载的文件,查看里面的内容,发现对一个地址使用了GET方法,并传入了页码的参数。

再看看返回的内容是一个json字符串。

这个 json字符串里就有我们想要内容。一起看下如何用requests 发送参数,并返回Json 结果。

headers = {
  'Accept': 'application/json' 
}
url=f'https://forum.cocos.org/c/Creator/l/latest?page={1}';
html=requests.get(url,headers=headers);
if html.status_code == 200:
    html_bytes = html.content;
    html_str = html_bytes.decode();

只需要根据地址,传入一个 headers 告诉网页我们要接收json字符串。

解析json

json是一种数据存储格式,可以被多种语言解析,一般用于数据传输。

由前一张图,可以看到所有文章列表在topic_list的topics中,一起看看 python3 是怎么解析的。

data = json.loads(html_str);
all_items=data['topic_list']['topics']
write_content=[];
for item in all_items:
  slug = item['slug'];
  item_id = item['id']
  link = f'https://forum.cocos.org/t/{slug}/{item_id}'
  title = item['title'];
  like_count = item['like_count'];
  like_count = item['like_count'];
  posts_count = item['posts_count'];
  views = item['views'];
  created_at = item['created_at'];
  write_content.append({'标题': title, '链接': link
  , '点赞':like_count , '回复':posts_count
  , '浏览':views , '发帖时间':created_at
  });

其中的链接地址可以通过打开几个论坛内容找到规律,是由 slug 和 id 这两个字段拼接的。

最后使用多线程 和 csv 存储结果。(不清楚的话可以看看之前的文章哦。python爬虫入门实战(三)python爬虫入门实战(二)!多线程爬虫!

pool = Pool(3);
orign_num=[x for x in range(0,10)];
result = pool.map(scrapy,orign_num);

with open('ccc_title_link.csv', 'w', newline='') as csvfile:
    fieldnames = ('标题', '链接', '点赞', '回复','浏览', '发帖时间')
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for write_content in result:
      for _content in write_content:
         writer.writerow(_content);

最后,看看最终效果吧!

小结

对于动态生成的内容,我们可以通过网页分享中下载的文件分析,并通过requests模块模拟headers 和发送参数方法获取数据。

这是我学到的新技能哦!如有错误或其他想法,欢迎留言!如果我又学到新的东西,会第一时间分享给大家哦!点个关注不迷路!

本文分享自微信公众号 - 白玉无冰(lamyoung-com),作者:lamyoung

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python爬虫入门实战!爬取博客文章标题和链接!

    爬虫有什么用呢?举个最简单的小例子,你需要《战狼2》的所有豆瓣影评。最先想的做法可能是打开浏览器,进入该网站,找到评论,一个一个复制到文本中,保存,翻页,接着复...

    白玉无冰
  • cocos creator | 用摄像机实现残影幻影拖尾效果

    利用摄像机拍摄角色,然后投影到多个显示画布,给画布节点设置不同的透明度,最后让画布节点跟随角色移动。

    白玉无冰
  • cocos creator | 用摄像机实现背景滚动

    创建一个新的typescript项目。 在场景中添加一个场景两倍宽的画布节点,并将两张背景图放在画布节点内。

    白玉无冰
  • 找寻欧式距离在Mathematica当中的用法

    WolframChina
  • BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头(模拟 调和级数)

    attack
  • Linux学习24-腾讯云服务器开启swap分区

    最近有小伙伴买的腾讯云的1核1G入门级服务器,发现部署的服务多了后,会自动停掉一些docker的的容器。 新买的腾讯云主机没有提供Swap分区,理由是由于主机经...

    上海-悠悠
  • 如何在SAP Cloud for Customer里自定义query

    需求:C4C的Account列表,会显示所有的Account,客户觉得使用起来没有针对性。客户希望默认只看到自己感兴趣的那些Account。

    Jerry Wang
  • 数据可视化-Matplotlib在线图上填充区域

    今天我们将学习如何填充Matplotlib中的线图。这不仅可以使我们的图表看起来更专业,而且我们还可以通过根据特定阈值填充区域来添加有用信息。

    亚乐记
  • Android代码判断手机是否已root方法学习

    Android代码判断手机是否已root方法学习 关于判断手机是否已经root的方法。如果app有一些特殊功能需要root权限,则需要判断是否root。比如...

    用户1289394
  • Docker Client (another java docker client api)

    前一篇提到了docker-java,这里介绍另一个docker client 库,Docker Client

    用户1177380

扫码关注云+社区

领取腾讯云代金券