python爬虫编程实践4-大作业:用selenium爬取腾讯新闻的热点精选

1、任务目标

(1)了解ajax加载
(2)通过chrome的开发者工具,监控网络请求,并分析
(3)用selenium完成爬虫
(4)任务: 用selenium爬取https://news.qq.com/ 的热点精选
(5)目标:热点精选至少爬50个出来,存储成csv 每一行如下 标号(从1开始),标题,链接,…

2、爬取腾讯新闻的热点精选(自己实现的代码)

import time
from  selenium import webdriver
#1、进入指定页面
url = "https://news.qq.com/"

browser = webdriver.Chrome()
browser.set_window_size(1000,30000)
browser.get(url)
#2、通过模拟鼠标滚动来获得更多的页面信息
browser.execute_script("window.scrollBy(0,3000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,5000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,8000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,12000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,15000)")
time.sleep(1)
# 3、抓取新闻标题
titles = browser.find_elements_by_class_name('detail')
# 4、将抓取内容保存在文件中
sfile = open('titles.txt','a',encoding='utf-8')  #新建文件并打开,追加写模式
for i in range(5,len(titles)):    #因为前五条是“今日要闻”,从第六条开始才属于热点精选内容
    title = titles[i].text.split('\n')[0]   #除了新闻标题,还抓取了无关信息,故进行提取
    link = browser.find_element_by_partial_link_text(title[3:]) # 抓取新闻链接,有一条“专题”在首段,影响匹配,故从第3个字符开始
    link_url = [link.get_attribute('href')]  #提取链接
    data = str({'num':i-4,'title':title,'url':link_url}) #汇总提取的信息
    ntu.append([i-4,title,link_url[:]]) #将信息写入列表中
    sfile.writelines(data) #将信息写入文档中
sfile.close()
browser.close()
# 按要求从列表中输出打印
print("{0:^},{1:^}, {2:^}".format('num','\t\t title','\t\t\t\t\t url',chr(12288)))  #打印表头
for i in range(50):
    n = ntu[i]
    print(ntut.format(n[0],n[1],str(n[2])[1:-1],chr(12288))) #注意,格式化输入的必须是字符串,并且将两头的列表括号删掉

3 参考代码

import time
from  selenium import webdriver
driver=webdriver.Chrome(executable_path="D:\chromedriver\chromedriver.exe")
driver.get("https://news.qq.com")
#了解ajax加载
for i in range(1,100):
    time.sleep(2)
    driver.execute_script("window.scrollTo(window.scrollX, %d);"%(i*200))
from bs4 import BeautifulSoup
html=driver.page_source
bsObj=BeautifulSoup(html,"lxml")
jxtits=bsObj.find_all("div",{"class":"jx-tit"})[0].find_next_sibling().find_all("li")
# 按照要求打印
print("index",",","title",",","url")
for i,jxtit in enumerate(jxtits):   
    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)
    print(i+1,",",text,",",url)    

4 总结

通过八天左右紧张而又充实的学习,自己也算对python的爬虫有了了解(只敢说了解,不敢说掌握)。回顾一下:
通过task1了解了HTTP和网页基础以及api的使用,尝试使用request-get爬取豆瓣电影top的信息;
通过task2了解了bs4这么一个非常棒的html解析和提取的库,以及匹配更高效的xpath方法和正则表达式方法,实战了爬取丁香园-用户名和回复内容、淘宝商品比价定向爬虫这两个小项目;
通过task3了解了ip代理、session和cookie以及特别好用的selenuim(自动化测试工具),实战了模拟登录丁香园,并抓取论坛页面所有的人员基本信息与回复帖子内容;
task4通过小作业,实现了对前面所学知识的应用,通过自己的摸索实现了大作业的部分内容。
当然也有遗憾,爬取需要登录网站出现验证(按要求点图上的汉字、按要求拖动位置)的部分无法模拟。以后有时间将继续学习,欧力给。

版权声明:本文为weixin_44104450原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。