添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息。通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的。这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库MySQL中,以便对数据进行分析,比如分析哪个时间段发表的博客多、结合WordCloud分析文章的主题、文章阅读量排名等。
这是一篇基础性的文章,希望对您有所帮助,如果文章中出现错误或不足之处,还请海涵。下一篇文章会简单讲解数据分析的过程。

一. 爬取的结果

爬取的地址为: http://blog.csdn.net/Eastmount

from selenium import webdriver from selenium.webdriver.common.keys import Keys import selenium.webdriver.support.ui as ui import re import time import os import codecs import MySQLdb #打开Firefox浏览器 设定等待加载时间 driver = webdriver.Firefox() wait = ui.WebDriverWait(driver,10) #获取每个博主的博客页面低端总页码 def getPage(): print 'getPage' number = 0 texts = driver.find_element_by_xpath("//div[@id='papelist']").text print '页码', texts m = re.findall(r'(\w*[0-9]+)\w*',texts) #正则表达式寻找数字 print '页数:' + str(m[1]) return int(m[1]) def main(): #获取txt文件总行数 count = len(open("Blog_URL.txt",'rU').readlines()) print count n = 0 urlfile = open("Blog_URL.txt",'r') #循环获取每个博主的文章摘信息 while n < count: #这里爬取2个人博客信息,正常情况count个博主信息 url = urlfile.readline() url = url.strip("\n") print url driver.get(url) #获取总页码 allPage = getPage() print u'页码总数为:', allPage time.sleep(2) #数据库操作结合 conn=MySQLdb.connect(host='localhost',user='root', passwd='123456',port=3306, db='test01') cur=conn.cursor() #数据库游标 #报错:UnicodeEncodeError: 'latin-1' codec can't encode character conn.set_character_set('utf8') cur.execute('SET NAMES utf8;') cur.execute('SET CHARACTER SET utf8;') cur.execute('SET character_set_connection=utf8;') #具体内容处理 m = 1 #第1页 while m <= allPage: ur = url + "/article/list/" + str(m) print ur driver.get(ur) article_title = driver.find_elements_by_xpath("//div[@class='article_title']") for title in article_title: #print url con = title.text con = con.strip("\n") #print con + '\n' article_description = driver.find_elements_by_xpath("//div[@class='article_description']") for description in article_description: con = description.text con = con.strip("\n") #print con + '\n' article_manage = driver.find_elements_by_xpath("//div[@class='article_manage']") for manage in article_manage: con = manage.text con = con.strip("\n") #print con + '\n' num = 0 print u'长度', len(article_title) while num < len(article_title): #插入数据 8个值 sql = '''insert into csdn_blog (URL,Author,Artitle,Description,Manage,FBTime,YDNum,PLNum) values(%s, %s, %s, %s, %s, %s, %s, %s)''' Artitle = article_title[num].text Description = article_description[num].text Manage = article_manage[num].text print Artitle print Description print Manage #获取作者 Author = url.split('/')[-1] #获取阅读数和评论数 mode = re.compile(r'\d+\.?\d*') YDNum = mode.findall(Manage)[-2] PLNum = mode.findall(Manage)[-1] print YDNum print PLNum #获取发布时间 end = Manage.find(u' 阅读') FBTime = Manage[:end] cur.execute(sql, (url, Author, Artitle, Description, Manage,FBTime,YDNum,PLNum)) num = num + 1 else: print u'数据库插入成功' m = m + 1 #异常处理 except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1]) finally: cur.close() conn.commit() conn.close() n = n + 1 else: urlfile.close() print 'Load Over' main() 在Blog_Url.txt文件中放置需要爬取用户的博客地址URL,如下图所示。注意在此处,作者预先写了个爬取CSDN所有专家的URL代码,这里为访问其他人用于提升阅读量已省略。
分析过程如下所示。
1.获取博主总页码
首先从Blog_Url.txt读取博主地址,然后访问并获取页码总数。代码如下:
#获取每个博主的博客页面低端总页码     
def getPage():
    print 'getPage'
    number = 0      
    texts = driver.find_element_by_xpath("//div[@id='papelist']").text      
    print '页码', texts      
    m = re.findall(r'(\w*[0-9]+)\w*',texts) #正则表达式寻找数字      
    print '页数:' + str(m[1])      
    return int(m[1])   
        比如获取总页码位17页,如下图所示: 


        代码如下所示。注意,在while中同时获取三个值,它们是对应的。

article_title = driver.find_elements_by_xpath("//div[@class='article_title']") for title in article_title: con = title.text con = con.strip("\n") print con + '\n' article_description = driver.find_elements_by_xpath("//div[@class='article_description']") for description in article_description: con = description.text con = con.strip("\n") print con + '\n' article_manage = driver.find_elements_by_xpath("//div[@class='article_manage']") for manage in article_manage: con = manage.text con = con.strip("\n") print con + '\n' num = 0 print u'长度', len(article_title) while num < len(article_title): Artitle = article_title[num].text Description = article_description[num].text Manage = article_manage[num].text print Artitle, Description, Manage

4.特殊字符串处理
获取URL最后一个/后的博主名称、获取字符串时间、阅读数代码如下:
#获取博主姓名
url = "http://blog.csdn.net/Eastmount"
print url.split('/')[-1]
#输出: Eastmount
#获取数字
name = "2015-09-08 18:06 阅读(909) 评论(0)"
print name
import re
mode = re.compile(r'\d+\.?\d*')  
print mode.findall(name)
#输出: ['2015', '09', '08', '18', '06', '909', '0']
print mode.findall(name)[-2]
#输出: 909
#获取时间
end = name.find(r' 阅读')
print name[:end]
#输出: 2015-09-08 18:06
import time, datetime
a = time.strptime(name[:end],'%Y-%m-%d %H:%M')
print a
#输出: time.struct_time(tm_year=2015, tm_mon=9, tm_mday=8, tm_hour=18, tm_min=6,
#      tm_sec=0, tm_wday=1, tm_yday=251, tm_isdst=-1)

三. 数据库相关操作

SQL语句创建表代码如下:

CREATE TABLE `csdn` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `URL` varchar(100) COLLATE utf8_bin DEFAULT NULL,
  `Author` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '作者',
  `Artitle` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '标题',
  `Description` varchar(400) COLLATE utf8_bin DEFAULT NULL COMMENT '摘要',
  `Manage` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '信息',
  `FBTime` datetime DEFAULT NULL COMMENT '发布日期',
  `YDNum` int(11) DEFAULT NULL COMMENT '阅读数',
  `PLNum` int(11) DEFAULT NULL COMMENT '评论数',
  `DZNum` int(11) DEFAULT NULL COMMENT '点赞数',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=9371 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
显示如下图所示:


其中,Python调用MySQL推荐下面这篇文字。
[python] 专题九.Mysql数据库编程基础知识
核心代码如下所示:

# coding:utf-8 
import MySQLdb
    conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',port=3306, db='test01')
    cur=conn.cursor()
    #插入数据
    sql = '''insert into student values(%s, %s, %s)'''
    cur.execute(sql, ('yxz','111111', '10'))
    #查看数据
    print u'\n插入数据:'
    cur.execute('select * from student')
    for data in cur.fetchall():
        print '%s %s %s' % data
    cur.close()
    conn.commit()
    conn.close()
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])
注意,在下载过程中,有的网站是新版本的,无法获取页码。
比如: http://blog.csdn.net/michaelzhou224
这时需要简单设置,跳过这些链接,并保存到文件中,核心代码如下所示:
#获取每个博主的博客页面低端总页码     
def getPage():
    print 'getPage'
    number = 0      
    #texts = driver.find_element_by_xpath("//div[@id='papelist']").text
    texts = driver.find_element_by_xpath("//div[@class='pagelist']").text
    print 'testsss'
    print u'页码', texts
    if texts=="":
        print u'页码为0 网站错误'
        return 0
    m = re.findall(r'(\w*[0-9]+)\w*',texts) #正则表达式寻找数字      
    print u'页数:' + str(m[1])      
    return int(m[1])   
        主函数修改: 
    error = codecs.open("Blog_Error.txt", 'a', 'utf-8')
    #循环获取每个博主的文章摘信息 
    while n < count:  #这里爬取2个人博客信息,正常情况count个博主信息
        url = urlfile.readline()
        url = url.strip("\n")
        print url
        driver.get(url+"/article/list/1")
        #print driver.page_source
        #获取总页码
        allPage = getPage()
        print u'页码总数为:', allPage
        #返回错误,否则程序总截住
        if allPage==0:
            error.write(url + "\r\n")
            print u'错误URL'
            continue;   #跳过进入下一个博主
        time.sleep(2)
        #数据库操作结合
              .....
        最后希望文章对你有所帮助,如果文章中存在错误或不足之处,还请海涵~         提高效率,提升科研,认真教学,娜美人生。       (By:Eastmount 2017-03-13 下午1点半    http://blog.csdn.net/eastmount/ 前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息。通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的。这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库MySQL中,以便对数据进行分析,比如分析哪个时间段发表的博客多、结合WordCloud分析文章的主题、文章阅读量排名等。 这是一篇基础性的文章,希望对您有所帮助,如果文章中出现错误或不足之处,还请海涵。下一篇文章会简单讲解数据分析的过程。
爬虫爬取微信文章,设置多账号,可以解决被封号问题使用技术点: pythonselenium(每次登录),mysql,ORM 框架SQLAlchemy,BeautifulSoup,lxml,apscheduler 1.需要配置爬取数量和每次爬取数量 2.第一次登录需要调用login函数扫码,存储在本地的cookies文件,需要转移到cookies文件夹中,该设置的目的后期优化多公众号爬取,突破每天能爬取次数的限制 3.selenium需要设置一个目录文件夹下对应chrome版本的chromedriver.exe
将从一个网站上爬到的数据存入MySQL数据库 先要在数据库中建立相对于的table(表),然后将爬到的数据存入表中就可以了,如下是用类实现的某电影网站爬到的电影数据存入数据库的过程 import requests import csv from lxml import etree import pymysql class ConnMysql(object): def __init__(s...
爬取糗事百科中24小时网页中第一列表页中所有文章的内容,作者,搞笑数,评论数为例,将爬取的四项内容存入mysql数据库中。 思路:要想存入数据库中就需要用到数据库中的表,所以我们首先创建一个名叫‘myblog’的数据库,然后在此数据库中建立一个名 叫‘qiushi’的表,可以使用命令符进入mysql数据库,使用mysql语句进行创建。也可以使用Navicat Premium软件直接连接m...
本文实例讲述了Python3实现的爬虫爬取数据存入mysql数据库操作。分享给大家供大家参考,具体如下: 爬一个电脑客户端的订单。罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chrome自带的F12类似。客户端有接单大厅,罗列所有订单的简要信息。当单子被接了,就不存在了。我要做的是新出订单就爬取记录到我的数据库zyc里。 设置每10s爬一次。 抓包工具页面如图: 首先是爬虫,先找到数据存储的页面,再用正则爬出。 # -*- coding:utf-8 -*- import re import requests import pymysql #Python3的mysql模块
目录一、新建项目二、程序的编写三、数据爬取1.在cmd窗口输入scrapy startproject [项目名称] 创建爬虫项目接着创建爬虫文件,scrapy genspider [爬虫名字] [爬虫域名]打开pycharm项目,就可以看到生成的cblog.py文件1.在项目下新建main.py,写入以下代码,方便后续项目调试main.py 2.编写爬虫程序kblog.py 3.在items.py文件中创建items函数与爬取数据对应items.py 4.在数据库中新建数据表MyArticle
以下为在本地的部署方式 前端启动 npm run dev 模型启动在9527端口, 在前端的代码中固定了会通过http请求后端5000端口 后端启动 python manage.py 默认监听5000端口 启动celery celery -A app.task.spider_tasks worker -l INFO celery 可以执行的任务都写在了app.task.spider_tasks中 直接使用了vue-element-admin框架,代码尽可能复用element 1、需要下载一个chromedriver.exe。下载地址:ChromeDriver Mirror 注意:需要对应自己谷歌的版本,找一个版本相近的即可,可以复制chromedriver.exe文件的路径并加入到电脑的环境变量中去,方便以后使用。 2、程序运行前需要将chromedriver.exe文件导入到你的程序中 3、导入程序运行所需要的包 from selenium import webdr.
### 回答1: Python爬虫中可以使用Selenium库来爬取网页信息。Selenium可以模拟浏览器行为,能够爬取JavaScript渲染后的网页信息。使用Selenium爬取网页时,需要配合浏览器驱动(如ChromeDriver、FirefoxDriver)使用。 ### 回答2: Python是一种高级编程语言,吸引了大量编程人员和开发者使用Python进行Web开发、数据分析、机器学习和人工智能等领域的开发。爬虫技术正是其中的一项重要技术,用python编写爬虫程序通常更加便捷和灵活。而seleniumPython中主要的爬虫库之一,用于爬取动态Web页面,可以模拟用户在浏览器中的行为,从而获取大量数据。 使用selenium爬取信息可以分为以下几个步骤: 1.安装和导入selenium和webdriver: 首先需要安装适合的版本的selenium包,并导入selenium和webdriver模块: ```python from selenium import webdriver 2.配置浏览器驱动: Selenium需要浏览器驱动(如Chrome,Firefox等)来与其进行交互,需要配置如下: ```python driver = webdriver.Chrome() 其中,Chrome()表示使用Chrome浏览器驱动,如果使用Firefox,则需要改为Firefox()。 3.访问网页: 使用get()函数可以访问指定的网址: ```python driver.get("https://www.baidu.com/") 4.查找元素: 使用selenium的查找元素功能,可以根据元素的ID、name、class、tag等属性进行查找: ```python element = driver.find_element_by_id("kw") # 根据ID查找 element = driver.find_element_by_name("wd") # 根据name查找 element = driver.find_element_by_class_name("s_ipt") # 根据class查找 element = driver.find_element_by_tag_name("input") # 根据tag查找 5.模拟用户输入/点击: 使用send_keys()函数模拟用户在搜索框中输入关键字,使用click()函数模拟用户在搜索按钮上点击: ```python element.send_keys("Python") element.click() 6.解析数据: 使用webdriver的page_source属性可以获取网页的源代码,然后使用正则表达式或BeautifulSoup库等解析数据。 以上就是使用selenium进行爬虫的主要步骤。实际应用中,需要根据不同的网站和需要爬取数据进行具体的配置和调整。在使用selenium过程中,需要了解一些常见的使用技巧和注意事项,例如模拟等待时间,处理弹窗、验证码等。同时,也需要遵循爬虫的法律和道德规范,不得进行非法、滥用等行为。 ### 回答3: selenium是一种自动化测试工具,它可以模拟浏览器行为,实现自动化操作。在Python爬虫中,selenium也可以用来爬取需要模拟人工操作的网站数据。 使用selenium可以实现以下操作: 1.自动模拟浏览器打开网页,获取网页源码。 2.模拟用户操作,如点击按钮、填写文本框、下拉选择框等。 3.通过获取网页源码进行数据解析。 基本流程比较简单,首先需要准备好selenium的环境,这需要下载对应的webdriver,这里我使用Chrome浏览器,并且下载了对应版本的chromedriver。 然后通过selenium启动浏览器,在浏览器中进行模拟操作,最后获取网页源码进行数据解析。 具体实现可以参考以下代码: ```python from selenium import webdriver from bs4 import BeautifulSoup # 创建一个Chrome浏览器实例 browser = webdriver.Chrome() # 访问目标网页 browser.get('https://www.example.com') # 模拟点击按钮,等待加载完成 button = browser.find_element_by_xpath('//button[@class="btn"]') button.click() browser.implicitly_wait(5) # 获取网页源码 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') data = soup.find_all('div', class_='data') # 处理数据 for item in data: # do something # 关闭浏览器 browser.quit() 总体来说,selenium是一个强大的爬虫工具,可以应对大部分需要模拟人工操作的场景,但也存在一些缺点,比如速度慢、占用资源高等。因此在具体应用中需要根据实际情况进行选择。