Selenium驱动firefox爬取今日头条

前提:
1.安装selenium包:pip install selenium
2.安装MySQL数据库,并下载Navicat可视化工具
Navicat可视化工具链接:
https://pan.baidu.com/s/1xOzg2Rp9L4LVv15QmRkqbQ
提取码: 1ck5
3.下载Firefox驱动器
注意:
这里要保证Firefox、geckodriver、selenium三者的版本相互兼容,不然会出现错误或者驱动不了Firefox浏览器的情况。
这里提供一篇博客,讲述如何安装三者,保证相互兼容:
相互兼容问题

请先看源码,源码中有一些不明白的地方,在从这里查

说明资料

cursor.execute('use news')

# SQL语句的意思是建立一个序号自增,包含title\title_pic\author\times\article_pic\article的表格sql = '''create table {}(id int(11) not null auto_increment primary key,title varchar(100),title_pic varchar(100),author varchar(50),times varchar(30),article_pic varchar(100),article text)'''.format(path)try:cursor.execute(sql)except:pass

dict = {'军事':'military','娱乐':'entertainment','科技':'science','体育':'sport'}

`titles= brower.find_elements_by_xpath('//div[@class="title-box"]/a')title_pics = brower.find_elements_by_xpath('//a[@class="img-wrap"]/img')

如何不会利用xpath的话,也可以这样:
打开页面,按F12,选择
然后定位到需要爬取的新闻:

通过这种方法也可以获取xpath。

对于每一篇具体新闻,只需要利用BeautifulSoup解析后,利用其页面选择方法即可获取

代码:

from selenium import webdriver
import re
import os
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options
import pymysql
import requests
import urllib.request
all_comments = []# 指定无头爬取,加快速度,如果是初学者,不建议这样做,可视化驱动可以让我们理解具体爬取过程
options = Options()
options.add_argument('--headless')brower = webdriver.Firefox(firefox_options=options)# 连接MySQL
db = pymysql.connect(host='localhost',user='root',password='118922',port=3366)
cursor = db.cursor()
# 指定使用哪个数据库,这里指定使用news数据库
cursor.execute('use news')# 这里只爬取四类新闻,其他新闻操作类似
dict = {'军事':'military','娱乐':'entertainment','科技':'science','体育':'sport'}def main():# SQL语句的意思是建立一个序号自增,包含title\title_pic\author\times\article_pic\article的表格sql = '''create table {}(id int(11) not null auto_increment primary key,title varchar(100),title_pic varchar(100),author varchar(50),times varchar(30),article_pic varchar(100),article text)'''.format(path)try:cursor.execute(sql)except:passtitle_list = []link_list = []title_pic_list = []all = []# 进入头条界面brower.get('https://landing.toutiao.com/')brower.implicitly_wait(10)# 由于军事是在“更多”这个标签下,相当于二级菜单,故需要单独处理if keyword != '军事':brower.find_element_by_link_text(keyword).click()time.sleep(5)# 重复点击,防止爬取相同新闻brower.find_element_by_link_text(keyword).click()brower.implicitly_wait(5)else:more = brower.find_element_by_link_text('更多')# 控制鼠标移到二级菜单进行处理ActionChains(brower).move_to_element(more).perform()#brower.implicitly_wait(10)brower.find_element_by_link_text('军事').click()time.sleep(2)#brower.find_element_by_link_text('军事').click()# 通过selenium的查找方法找到需要的内容titles= brower.find_elements_by_xpath('//div[@class="title-box"]/a')title_pics = brower.find_elements_by_xpath('//a[@class="img-wrap"]/img')for title,title_pic,_ in zip(titles,title_pics,range(50)):title_list.append(title.text)link_list.append(title.get_attribute('href'))title_pic_list.append(title_pic.get_attribute('src'))# 遍历新闻链节,进入新闻内容页面for title,link,pic_link in zip(title_list,link_list,title_pic_list):dict = {}brower.get(link)time.sleep(1)article = ''# 获取源码,然后利用BeautifulSoup解析页面html = brower.page_sourcesoup = BeautifulSoup(html,'html.parser')try:contents = soup.find('div',class_='article-content').find_all('p')photos = soup.find('div',class_='article-content').find_all('img')time_authors = soup.find('div',class_='article-sub')# 这里获取的是时间和作者,故需利用正则匹配time_authors_text = time_authors.get_text()author = re.match('(^.*?)\d',time_authors_text)times =  re.search('\d.*',time_authors_text)# 获取具体内容for content in contents:if content.get_text():article += content.get_text().strip() + '\n'# 将所以要获取的内容以字典形式保存dict = {'title':title,'author':author.group(1),'time':times.group(0),'article':article,'title_pic':pic_link,'article_pic':photos[0].get('src')}all.append(dict)except:passfor item in all:title = item['title']title_pic = item['title_pic']author = item['author']times = item['time']article_pic = item['article_pic']article = item['article']# 将获取的内容存入数据库中sql = '''insert ignore into {}(title,title_pic,author,times,article_pic,article)VALUES (%s,%s,%s,%s,%s,%s)'''.format(path)try:cursor.execute(sql,(title,title_pic,author,times,article_pic,article))db.commit()print('插入成功')except:db.rollback()print('插入失败')if __name__ == '__main__':for k, v in dict.items():keyword = kpath = vmain()brower.close()db.close()

Selenium驱动firefox爬取今日头条并存放在MySQL数据库中相关推荐

  1. 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载

    用 Python selenium爬取实时股票新闻并存入mysql数据库中 1.分析需求 2.创建表 3.分析需要爬取的网页内容 4.python里面selenium进行爬虫操作 1.添加包 2.连接 ...

  2. 在ubuntu 16.04里使用python—scrapy将爬取到的数据存到mysql数据库中的一些随笔

    一.将爬取的数据保存到mysql数据库的代码(已经能将爬取的数据保存到json文件) (1)编辑Pipeline.py文件 (2)编辑settings.py文件 二.将数据保存至mysql数据库出现的 ...

  3. python爬取 xueqiu网 数据 存入MySQL数据库中

    #导入包 from urllib import request import json import pymysql #声名一个class类 class mysql_connect(object):# ...

  4. 爬取今日头条图片(解决缩略图问题+MySQL)

    爬取今日头条图片 1. 引言 2. 分析 2.1 获取主页的url 2.2 获取当前页所有文章的链接 2.3 具体文章的信息 2.4 MySQL设置 3.代码 4. 效果 4.1 本地效果图 4.2 ...

  5. 爬取今日头条新闻selenium

    from selenium import webdriver, common import time # 爬取今日头条的新闻 browser = webdriver.Chrome() browser. ...

  6. python抽取指定url页面的title_Python使用scrapy爬虫,爬取今日头条首页推荐新闻

    爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 ...

  7. Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  8. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  9. python编程100例头条-python爬虫演示:以爬取今日头条为例

    编者按 众所周知,Python是一门编程语言,操作简洁而清晰.功能专业而强大.入门容易又严谨.2018年,教育部正式将人工智能.物联网.大数据处理划入高中课程,这就意味着,现在的中学生开始就要学习编程 ...

最新文章

  1. Windows中配置java变量环境
  2. Solaris10之SVM简析
  3. ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测
  4. nagios搭建(一):nagios3.2的搭建
  5. BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)
  6. android 音频播放总结 soundlPool,MediaPlay
  7. Gartner 发布2019年超融合魔力象限:新增深信服一员!
  8. IAR编译器中函数智能提示
  9. WP7开发第一课:软件生命周期(其二)
  10. 【linux】centos6.9通过virtualenv安装python3.5
  11. PTA 11-散列4 Hard Version (30分)
  12. 学习方法推荐——番茄工作法
  13. 数据科学分布——Beta分布
  14. FreeSWITCH技巧:实现短消息发送
  15. 一个30岁转行IT行业从小兵到主管的崎岖成长之路
  16. php微信网页不缓存,微信浏览器取消缓存的方法
  17. 【银河麒麟国产服务器安装mysql、nginx和docker遇到的问题】(回忆篇)
  18. 软件测试中的白盒测试分析
  19. qmc5883磁力计指南针 linux驱动
  20. 基于VHDL的全自动洗衣机控制器设计

热门文章

  1. java List去重,并且保持顺序
  2. 世界读书日,我买了全套的《明朝那些事儿》
  3. Leetcode学习之动态规划
  4. 办公室人员老是坐着怎么办??
  5. Linux用户空间与内核空间内存映射
  6. 【总结】前端会用到的各种链接
  7. Java数据类型系列之BigDecimal
  8. CAD怎么在线转换图纸呢?
  9. 【Jupyter】【Matplotlib】无法显示中文问题
  10. CES2018前瞻:在未来 我们需要关注这些领域