我们今天的目标是自动加载多页新闻内容的:标题、图片、作者、类型、发布时间
在浏览器里,头条的首页是可以不断滑动到底自动加载下一页新闻内容的,我们在上一篇文章Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】 中实现的,只能获取第一页的10条新闻,因为这些新闻内容是通过异步请求刷新的,本节我们将实现自动循环加载N页新闻内容
2.1、模拟页面滚动到底
我们看下在上一节实践中我们写的代码:
""" 获取头条首页内容 """ def __getTouTiaoHtml(self, url): if url and '' != url and url.startswith("http"): self.__browser.get(url) try: element = WebDriverWait(self.__browser, 10).until( EC.presence_of_element_located((By.XPATH, "//ul/li/div[@ga_event=article_item_click]")) ) except Exception as ex: print(ex) finally: pass resHtml = self.__browser.page_source return resHtml
在try-catch 那里只是等待页面加载完成出现新闻内容的布局元素后,就往下继续执行了,所以这里只能加载一页数据。找到问题就好办了,那么我们在
resHtml = self.__browser.page_source
这行代码之前,加一段代码实现循环模拟滑动滚动条到底部触发自动加载机制来加载更多内容:
1、简单实现:通过滑动到底后,sleep一定时间来保障分页内容加载完成:
try: """ 模拟滚动到底部加载下一页,一共循环6次,每次等待4s,这个时间根据网速调整,如果你需要获取更多,那么把循环的范围加大就行了。 """ for i in range(1, 6): self.__browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(4) except Exception as ex: print(ex)
最后,重新执行下,就能看到效果了,总共获取了70条新闻内容
2、高逼格一点的方法:我们分析下图布局:
加载中…这个布局,在新的分页内容加载过程中,这个style的display值不是none,而当加载完成后,这个display值变为none了,根据这个规律,我们可以根据底部这个加载中的布局从可见到隐藏状态的切换,来表示分页内容加载完成了,具体代码如下,替换上面方法1中的sleep(4):
try: for i in range(1, 6): self.__browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') try: element = WebDriverWait(self.__browser, 10).until( EC.presence_of_element_located((By.XPATH, '//span[contains(text(), "加载中")]/../div[@class="feed-infinite-wrapper"]/div[contains(@class, "ball-pulse")][contains(@class, "loading")][@style="display: none;"]')) ) except Exception as ex: pass except Exception as ex: print(ex)
全文完结,后续实现用其它框架来爬虫新闻资源。敬请期待~
原文链接:https://blog.csdn.net/xiaocy66/article/details/82861203?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277607816782390599918%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277607816782390599918&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-10-82861203-null-null.nonecase&utm_term=%E6%96%B0%E9%97%BB
暂无评论内容