利用selenium 模拟浏览器打开页面,加载后抓取数据

#!/usr/bin/env python
# coding=utf-8 import urllib2
import re
from bs4 import BeautifulSoup
from selenium import webdriver
import time import sys
reload(sys)
sys.setdefaultencoding('utf-8') class BaikeSpider(): def __init__(self):
self.queue = ["http://baike.baidu.com/view/8095.htm",
"http://baike.baidu.com/view/2227.htm"]
self.base = "http://baike.baidu.com"
self.crawled = set()
self.crawled_word = set() # client = MongoClient("localhost",27017)
# self.db = client["baike_db"]["html"] def crawl(self):
browser = webdriver.Chrome()
cnt = 0
fw = open('./baike_keywords.txt','wb')
while self.queue:
url = self.queue.pop(0)
if url in self.crawled :
continue
self.crawled.add(url)
try:
browser.get(url)
res = {}
links = BeautifulSoup(urllib2.urlopen(url).read(),'lxml').find_all("a")
links = list(set(links))
for link in links:
if 'href' not in dict(link.attrs) or re.search(u"javascript",link['href']) or len(link['href'])<8:
continue
url = link['href']
if re.search(u"baike\.baidu\.com/view/\d+|baike\.baidu\.com/subview/\d+/\d+.htm",url) and url not in self.crawled:
self.queue.append(url)
elif re.match(u"view/\d+",url):
url = self.base+ url
if url not in self.crawled:
self.queue.append(url) cnt += 1
print cnt
if cnt % 10 == 0:
print 'queue',len(self.queue)
fw.close()
fw = open('./baike_keywords.txt','a+') res['url'] = url
res['title'] = browser.title.split(u"_")[0] if res['title'] in self.crawled_word:
print 'title',res['title'],'has crawled'
continue vote = browser.find_element_by_class_name("vote-count")
view = browser.find_element_by_id("j-lemmaStatistics-pv") res['voted'] = vote.text
res['viewed'] = view.text line = []
line.append(res['title'])
line.append(res['viewed'])
line.append(res['voted'])
line.append(res['url']) line = '\t'.join(line)
fw.write(line+'\n')
self.crawled_word.add(res["title"]) except Exception,e:
print e
continue if __name__=='__main__':
test = BaikeSpider()
test.crawl()

另外,使用chrome加载会比firefox快,且少报错,异常退出!

python抓取百度百科点赞数等动态数据的更多相关文章

  1. Python抓取百度百科数据

    前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...

  2. python3 - 通过BeautifulSoup 4抓取百度百科人物相关链接

    导入需要的模块 需要安装BeautifulSoup from urllib.request import urlopen, HTTPError, URLError from bs4 import Be ...

  3. Python爬虫之小试牛刀——使用Python抓取百度街景图像

    之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...

  4. Python——爬取百度百科关键词1000个相关网页

    Python简单爬虫——爬取百度百科关键词1000个相关网页——标题和简介 网站爬虫由浅入深:慢慢来 分析: 链接的URL分析: 数据格式: 爬虫基本架构模型: 本爬虫架构: 源代码: # codin ...

  5. python抓取360百科踩过的坑!

    学习python一周,学着写了一个爬虫,用来抓取360百科的词条,在这个过程中.因为一个小小的修改,程序出现一些问题,又花了几天时间研究,问了各路高手,都没解决,终于还是自己攻克了,事实上就是对lis ...

  6. 爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

  7. 使用python抓取百度搜索、百度新闻搜索的关键词个数

    由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...

  8. C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库

    第一步:首先需要将csv先装换成datatable,这样我们就容易进行对datatable进行遍历: /// 将CSV文件的数据读取到DataTable中 /// CSV文件路径 /// 返回读取了C ...

  9. Python抓取百度汉字笔画的gif

    偶然发现百度汉语里面,有一笔一划的汉字顺序:          觉得这个动态的图片,等以后娃长大了,可以用这个教写字.然后就去找找常用汉字,现代汉语常用字表 .拿到这里面的汉字,做两个数组出来,一共是 ...

随机推荐

  1. Unity垃圾回收

    值类型:内置类型及结构体. 引用类型:对象.字符串.数组. GC的噩梦:连续字符串相加           System.Text.StringBuilder function ConcatExamp ...

  2. sql复制表

    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句       Insert是T-sql中常用语句,Insert INTO table(field1,field2,... ...

  3. linux概念之进程分析

    http://blog.csdn.net/kevinx_xu/article/details/8178746 /proc 详解 内核线程分析报告 进程层次 [root@109-com1 scripts ...

  4. Android Studio 单元测试

    测试的种类 按岗位划分 黑盒测试:测试逻辑业务 白盒测试:测试逻辑方法 按测试粒度分 方法测试:function test 单元测试:unit test 集成测试:integration test 系 ...

  5. oracle数据库数据导出和导入

    oracle的客户端里面的bin下面有两个可执行文件,名称分别为exp.exe和imp.exe. 他俩的用途就是导出和导入数据用的. 全库 导出:exp 用户名/密码@数据库名 full=y file ...

  6. Android App启动错误的问题(connection to the server was unsuccessful)

    问题描述: PhoneGap+Sencha Touch开发的应用,打包后的APP或者调试期间,在启动的时候提示如下信息: Application Error - The connection to t ...

  7. 剑指offer系列32-----对称二叉树的判断

    [题目]请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. package com.exe7.offer; /** * [题目]请实现一个函 ...

  8. CentOS生产机器禁止ROOT远程SSH登录

    方法一 很多站长拥有linux主机,不管是虚拟机还是实体机,一般我们远程连接的时候,都是用的ssh(SecureShell建立在应用层和传输层基础上的安全协议). 它默认的端口22,默认使用root也 ...

  9. ros的相关link

    http://markzhang.cn/blog/2014/08/19/ros-basic-setup/ http://blog.csdn.net/boliang319/article/details ...

  10. Erlang库 -- 有意思的库汇总

    抄自这里 首先,库存在的目的大致可分为:1.提供便利2.尽可能解决一些痛点 首先,我们先明确一下Erlang编程语言的一些痛点(伪痛点):1,单进程问题Erlang虚拟机属于抢占式调度,抢占式调度有很 ...