欢迎关注公众号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 等属性,我们只需要定位到相应的标题行,得到对应的内容格式:
以及打开每一个 li 后得到的内容:
我们可以写出代码:
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()