Selenium驱动firefox爬取今日头条并存放在MySQL数据库中
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数据库中相关推荐
- 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载
用 Python selenium爬取实时股票新闻并存入mysql数据库中 1.分析需求 2.创建表 3.分析需要爬取的网页内容 4.python里面selenium进行爬虫操作 1.添加包 2.连接 ...
- 在ubuntu 16.04里使用python—scrapy将爬取到的数据存到mysql数据库中的一些随笔
一.将爬取的数据保存到mysql数据库的代码(已经能将爬取的数据保存到json文件) (1)编辑Pipeline.py文件 (2)编辑settings.py文件 二.将数据保存至mysql数据库出现的 ...
- python爬取 xueqiu网 数据 存入MySQL数据库中
#导入包 from urllib import request import json import pymysql #声名一个class类 class mysql_connect(object):# ...
- 爬取今日头条图片(解决缩略图问题+MySQL)
爬取今日头条图片 1. 引言 2. 分析 2.1 获取主页的url 2.2 获取当前页所有文章的链接 2.3 具体文章的信息 2.4 MySQL设置 3.代码 4. 效果 4.1 本地效果图 4.2 ...
- 爬取今日头条新闻selenium
from selenium import webdriver, common import time # 爬取今日头条的新闻 browser = webdriver.Chrome() browser. ...
- python抽取指定url页面的title_Python使用scrapy爬虫,爬取今日头条首页推荐新闻
爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 ...
- Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】
Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...
- Python3从零开始爬取今日头条的新闻【一、开发环境搭建】
Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...
- python编程100例头条-python爬虫演示:以爬取今日头条为例
编者按 众所周知,Python是一门编程语言,操作简洁而清晰.功能专业而强大.入门容易又严谨.2018年,教育部正式将人工智能.物联网.大数据处理划入高中课程,这就意味着,现在的中学生开始就要学习编程 ...
最新文章
- Windows中配置java变量环境
- Solaris10之SVM简析
- ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测
- nagios搭建(一):nagios3.2的搭建
- BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)
- android 音频播放总结 soundlPool,MediaPlay
- Gartner 发布2019年超融合魔力象限:新增深信服一员!
- IAR编译器中函数智能提示
- WP7开发第一课:软件生命周期(其二)
- 【linux】centos6.9通过virtualenv安装python3.5
- PTA 11-散列4 Hard Version (30分)
- 学习方法推荐——番茄工作法
- 数据科学分布——Beta分布
- FreeSWITCH技巧:实现短消息发送
- 一个30岁转行IT行业从小兵到主管的崎岖成长之路
- php微信网页不缓存,微信浏览器取消缓存的方法
- 【银河麒麟国产服务器安装mysql、nginx和docker遇到的问题】(回忆篇)
- 软件测试中的白盒测试分析
- qmc5883磁力计指南针 linux驱动
- 基于VHDL的全自动洗衣机控制器设计