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. inline namespace

    无意中看到C++11中的新特性inline namespace, 先附上官方的解释 Inline namespace The inline namespace mechanism is intende ...

  2. ORA-27157 ORA-27300 ORA-27301

    目录: 问题现象 原因分析 解决方案 问题现象: 收到同事反馈,数据库无法连接.于是登录服务器发现,数据库莫名挂掉.实例crash,日志中记录截取一段如下: Errors in file /u01/a ...

  3. 【C++ Primer | 15】访问控制与继承、继承中的类作用域

    1. 只有D继承B的方式是public时,用户代码才能使用派生类向基类的转换:如果D继承B的方式是受保护的或者私有的,则用户代码不能使用该转换. 2. 不论D以什么方式继承B,D的成员函数和友员函数都 ...

  4. Redis cluster集群模式的原理

    redis cluster redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求 自动将数据进行分片,每个master上放一部分数据 提供内 ...

  5. rsa证书ssh登陆服务器

    好久不用,又生疏了. 今晚实操了一下,作一个记录. 使用rsa的密钥对登陆linux服务器,主要是为了安全. 这种证书级别的登陆,比最复杂的root用户名和帐号的安全性都要高一个等级. 至少服务器不会 ...

  6. golang ffmpeg 做网络直播

    最近在公司做在线视频转码的工作,研究了下ffmpeg 最后直接研究了下网络直播,我是在我自己的mac 上面测试的,效果,还可以,先看看效果图吧 ffmpeg 我是通过brew安装 的,这步就略了 VL ...

  7. js数字货币格式互转

    //将1,234,567.00转换为1234567.00 function moneyToNumValue(val) { var num = val.trim(); var ss = num.toSt ...

  8. javascript 相关小的知识点集合

    本文主要是列出一些javascript 相关的,不限于javascript的,容易记错或者遗忘的小知识,小技巧. 1.javascript中的false 在 JavaScript,常见的 false ...

  9. 【bzoj4976】宝石镶嵌

    题解: 比较水 注意k<=100这个条件 当n-k比较大的时候 我们显然会把它有的位都给取了 不然的话我们可以考虑dp 暴力状压就可以了 代码: #include <bits/stdc++ ...

  10. WebApi接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.作为程序猿,我们都知道参数和返回值是编程领域不可分割的两大块,此前分享了 ...