Python爬虫初级(十二)—— 新闻消息爬取实战

欢迎关注公众号K的笔记阅读博主更多优质学习内容
K的笔记公众号

上一篇内容:Python爬虫初级(十一)—— Selenium 详解

链接介绍

我们需要爬取的链接是:https://news.qq.com/
我们最终的爬取目标是将所有标题及其内容罗列出来存储为表格文档

爬取过程

其实这个爬虫的代码特别简单,就是使用我们前面学的 Selenium
教程,下面拆分代码进行讲解:

首先自然就是导入所需的所有库:

from bs4 import BeautifulSoup
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
import time
import csv

然后通过 driver 打开上面给出的链接:

driver = webdriver.Chrome()
driver.get("https://news.qq.com/")

然后由于新闻页面需要滑动才会显示下面的内容,我们设置一个控制屏幕滑动的代码:

for i in range(1,100):
    time.sleep(1)
    driver.execute_script("window.scrollTo(window.scrollX, %d);"%(i*150))

我们知道爬取这些由 JS 控制的页面时的困难主要在于我们得到的页面源代码和我们点击 F12 查看控制台看到的东西不是一回事,而 Selenium 的一大好处就是我们可以模拟浏览器查看时的状态,也就是我们可以像平时一样查看 Element 等属性,我们只需要定位到相应的标题行,得到对应的内容格式:

Element1
以及打开每一个 li 后得到的内容:

Element我们可以写出代码:

html=driver.page_source
soup=BeautifulSoup(html,"lxml")
jx_tit=soup.find_all("div",{"class":"jx-tit"})[0].find_next_sibling().find_all("li")

然后根据上面第二张 Element 图中解析出的格式保存相关信息即可:

f = open('news.csv','w',encoding='utf-8')
csv_writer = csv.writer(f)
csv_writer.writerow(["index",",","title",",","url"])
for i,jxtit in enumerate(jx_tit):    
    try:
        text=jxtit.find_all("img")[0]["alt"]
    except:
        text=jxtit.find_all("div",{"class":"lazyload-placeholder"})[0].text
    try:
        url=jxtit.find_all("a")[0]["href"]
    except:
        print(jxtit)
    csv_writer.writerow([i+1,text,url]) 
f.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值