Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】

Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】

Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】

所谓爬虫,就是通过编程的方式自动从网络上获取自己所需的资源,比如文章、图片、音乐、视频等多媒体资源。通过一定的方式获取到html的内容,再通过各种手段分析得到自己所需的内容,比如通过BeautifulSoup对网页内容进行解析提取。

本文通过selenium的webdriver模拟浏览器来浏览网页,通过lxml库解析得到咱所需的内容。下面开始我们的爬虫工作。

1.目标

我们今天的目标是模拟鼠标点击tab标签切换页面内容并且自动加载多页

我们查看头条新闻某个作者的主页,查看作者的视频列表,首先我们来找个目标,比如打开详情:《习近平号召“做一颗永不生锈的螺丝钉”》

我们点这个新华网,进去他的主页



我们的目标是视频这个页签的内容,把这个也签视频列表抓取出来,以便我们下一步解析视频地址、自动下载视频资源。

但是这里打开主页,默认都是打开文章页签的,我们需要模拟鼠标点击实现视频页签切换、下滑加载更多。

2.实现

打开主页等待新闻加载完成



我们观察这个页面的dom元素特性,页面加载出来的新闻,还是ul标签里面的li布局,liclassga_event都是一样的,通过这个特性,实现我们的等待页面加载完成,再进行tab页签点击切换。

等待页面加载完成的关键代码:
# 浏览器打开页面
self.__browser.get(url) try:
# 此处等到我们所需的热文元素加载出来了再进行下一步,避免页面还没加载完成就去解析内容导致内容为空
element = WebDriverWait(self.__browser, 10).until(
EC.presence_of_element_located((By.XPATH,'"//ul/li[@ga_event="feed_item_click"]'))
)
except Exception as ex:
print(ex)
finally:
pass
分析下顶部页签区域元素特点,我们可以通过id=wrapper来定位tab页签所在的祖父级布局,
最后定位到视频这个页签,相应的xpath为:

‘//*[@id=“wrapper”]/div[2]/div[1]/ul/li[2]’

通过xpath找到视频页签的页面元素,调用click事件就可以实现页签切换,关键代码:
    video_element = self.__browser.find_element_by_xpath('//*[@id="wrapper"]/div[2]/div[1]/ul/li[2]')
video_element.click()

当切换视频页签后,需要等待加载出来第一页的视频列表后才能进行下一步,我们观察下正常的视频页签加载完成列表时的布局如下图:



由上图可知只要浏览器能找到这个元素属性值,就表示加载完成了,相应的xpath为:'//div[ga_event="video_title_click"]',所以我们的代码如下:

    video_element = self.__browser.find_element_by_xpath('//*[@id="wrapper"]/div[2]/div[1]/ul/li[2]')
video_element.click()
try:
element = WebDriverWait(self.__browser, 10).until(
EC.presence_of_element_located((By.XPATH, '//div[ga_event="video_title_click"]'))
)
except Exception as ex:
pass
finally:
pass

好了,最后一步,模拟滚动条滚动到底加载多页视频新闻,原理跟之前的《Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】》一样,这里不重复了。


全文完结,后续实现用其它框架来爬虫新闻资源。敬请期待~


Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】

Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】

Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】


参考资料:

[1]: XPath语法参考
[2]: 廖雪峰老师的Python3 在线学习手册

[3]: Python3官方文档

[4]: 菜鸟学堂-Python3在线学习

[5]: 其他所有分享过python学习填坑网友的经验

Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】的更多相关文章

  1. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  2. Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  3. Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  4. python 简单爬取今日头条热点新闻(一)

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

  5. 使用scrapy爬虫,爬取今日头条搜索吉林疫苗新闻(scrapy+selenium+PhantomJS)

    这一阵子吉林疫苗案,备受大家关注,索性使用爬虫来爬取今日头条搜索吉林疫苗的新闻 依然使用三件套(scrapy+selenium+PhantomJS)来爬取新闻 以下是搜索页面,得到吉林疫苗的搜索信息, ...

  6. 使用scrapy爬虫,爬取今日头条首页推荐新闻(scrapy+selenium+PhantomJS)

    爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 ...

  7. 使用python-aiohttp爬取今日头条

    http://blog.csdn.net/u011475134/article/details/70198533 原出处 在上一篇文章<使用python-aiohttp爬取网易云音乐>中, ...

  8. 用Ajax爬取今日头条图片集

    Ajax原理   在用requests抓取页面时,得到的结果可能和浏览器中看到的不一样:在浏览器中可以正常显示的页面数据,但用requests得到的结果并没有.这是因为requests获取的都是原始 ...

  9. PYTHON 爬虫笔记九:利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集(实战项目二)

    利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集 目标站点分析 今日头条这类的网站制作,从数据形式,CSS样式都是通过数据接口的样式来决定的,所以它的抓取方法和其他网页的抓取方 ...

随机推荐

  1. Oracle下载 OPatch

    今天被朋友问及,如何下载OPatch ...我当时有些凌乱的.事后想想,人与人的思维是不同的,对待同一个问题,有人觉得很简单,有人觉得无从下手 . 乱不多说了.开始说明下吧. 1. 首先要有一个MOS ...

  2. 论文阅读笔记十:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs (DeepLabv2)(CVPR2016)

    论文链接:https://arxiv.org/pdf/1606.00915.pdf 摘要 该文主要对基于深度学习的分割任务做了三个贡献,(1)使用空洞卷积来进行上采样来进行密集的预测任务.空洞卷积可以 ...

  3. sqoop无法导出parquet文件到mysql

    1.问题描述 在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取到RDBMS数据库中,在使用Sqoop抽取Hive Parquet表时作 ...

  4. Stuck on "Authenticating with iTunes Store"

    https://forums.developer.apple.com/thread/76803 Try this, it fixed it for me. Open Terminal and run: ...

  5. SVN不要显示问号

    让SVN不要显示未进行版本控制的文件(夹)图标的问号: 1.选择TortoiseSVN→SettIngs 2.Overlays→取消勾选Unversioned,点击“应用”,然后重启电脑即可

  6. CentOS6.9安装Kafka

    先设置jdk1.8 vi /etc/profile export JAVA_HOME=/usr/local/jdkexport JRE_HOME=/usr/local/jdk/jreexport CL ...

  7. MVC异常处理(异常捕获)

    1.cshtml页面异常 2.Controller异常 3.路由参数异常. 4.页面不存在404 页面不存在404,可以通过配置config来处理 <customErrors mode=&quo ...

  8. Context连接和断开的情况下的CRUD操作

    连续情况下的CRUD操作是一项相当容易的任务,因为默认情况下,上下文会自动跟踪实体在其生命周期中发生的更改,AutoDetectChangesEnabled为true. 以下示例显示如何添加,更新和删 ...

  9. seafile数据的备份与恢复

    seafile数据备份包括MySQL数据备份与seafile,seahub数据备份两个部分.所以在备份的时候需要注意这一点. 我的存储底层用glusterfs数据共享,为了防止一台服务器宕机以后另一台 ...

  10. Zk 集群概念

    https://blog.csdn.net/gs80140/article/details/51496925