利用多线程动态抓取数据,网上也有不少教程,但发现过于繁杂,就不能精简再精简?!

不多解释,直接上代码,基本上还是很好懂的。

#!/usr/bin/env python
# coding=utf-8 import urllib2
import re,sys
from bs4 import BeautifulSoup
from selenium import webdriver
import threading
import time
reload(sys)
sys.setdefaultencoding("utf-8") queue = [
"http://baike.baidu.com/view/8332.htm",
"http://baike.baidu.com/view/145819.htm",
"http://baike.baidu.com/view/643415.htm",
"http://baike.baidu.com/view/157424.htm",
"http://baike.baidu.com/view/149759.htm",] crawled_url = set()
crawled_word = set() cnt = 0 class BaikeSpider(threading.Thread):
"""
模拟浏览器打开页面,多线程爬取数据
""" def __init__(self,name):
threading.Thread.__init__(self)
self.name = str(name) self.browser = webdriver.Chrome()
# 将抓取数据写入各自的文件
self.fw = open("baike_words_"+self.name+".txt","wb") def run(self):
global queue
global crawled_url
global crawled_word
global cnt while queue:
url = queue.pop(0) try:
self.browser.get(url)
# 休眠0.5s,等待数据加载
time.sleep(0.5)
links = BeautifulSoup(urllib2.urlopen(url).read(),"lxml").find_all("a")
vote = self.browser.find_element_by_class_name("vote-count").text
view = self.browser.find_element_by_id("j-lemmaStatistics-pv").text
word = self.browser.title.split(u"_")[0] if word in crawled_word or url in crawled_url:
continue
else:
for link in links:
if 'href' not in dict(link.attrs) or re.search(u"javascript",link['href']) or len(link['href'])
<8:
continue
tmpurl = link["href"]
if re.search("baike.baidu.com/view/\d+|baike.baidu.com/subview/\d+(/\d+)?",tmpurl) and tmpurl n
ot in crawled_url:
queue.append(tmpurl) crawled_url.add(url)
linedata = word+"\t"+view+"\t"+vote+"\t"+url+"\n"
self.fw.write(linedata) except Exception,e:
print 'error',e
continue cnt += 1
print cnt,self.name,'len',len(queue) def __exit__(self):
self.fw.close() if __name__=='__main__':
"""
开5个线程
"""
for i in range(5):
t = BaikeSpider(i)
t.start()

python 多线程抓取动态数据的更多相关文章

  1. Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  2. scrapy-splash抓取动态数据例子一

    目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...

  3. pythonのscrapy抓取网站数据

    (1)安装Scrapy环境 步骤请参考:https://blog.csdn.net/c406495762/article/details/60156205 需要注意的是,安装的时候需要根据自己的pyt ...

  4. php外挂python脚本抓取ajax数据

    之前我写过一遍php外挂python脚本处理视频的文章.今天和大家分享下php外挂python实现输入关键字搜索的脚本 首先我们先来分析一波网站: http://www.dzdpw.com/s.php ...

  5. scrapy-splash抓取动态数据例子八

    一.介绍 本例子用scrapy-splash抓取界面网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...

  6. scrapy-splash抓取动态数据例子七

    一.介绍 本例子用scrapy-splash抓取36氪网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  7. scrapy-splash抓取动态数据例子六

    一.介绍 本例子用scrapy-splash抓取中广互联网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  8. scrapy-splash抓取动态数据例子五

    一.介绍 本例子用scrapy-splash抓取智能电视网网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站 ...

  9. scrapy-splash抓取动态数据例子四

    一.介绍 本例子用scrapy-splash抓取微众圈网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...

随机推荐

  1. ViewPager动态加载、删除页面

    很多人在网上说ViewPager的PagerAdapter.notifyDataSetChanged()无效.刚开始我也这样认为,甚至被误导以为是真理.   后来,找了一下,在PagerAdatpar ...

  2. Void 0

    void anything 都返回 undefined , 使用Void 0 ,仅仅是因为习惯而已,所以不必介怀. 比较好的写法应该是 void(0)

  3. OpenJudge计算概论-整数奇偶排序

    /*===================================== 整数奇偶排序 总时间限制: 1000ms 内存限制: 65536kB 描述 输入10个整数,彼此以空格分隔 重新排序以后 ...

  4. Linux-Load blance

    在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转 ...

  5. VS 2010 编译安装 boost 库 -(和 jsoncpp 库共存)

    boost库的简单应用很容易,网上有很多资料,但是,如果要json 和 boost 一起使用就会出现这样那样的问题, 有时候提示找不到 “libboost_coroutine-vc100-mt-sgd ...

  6. 设置远程访问Oracle数据库

    我这里设置的是别人远程访问我本地的数据库. 方法: 通过WiFi共享,别人连接该共享的WiFi,来访问我的数据库(局域网). 步骤1: 下载WiFi共享大师. 步骤2: 安装好后开启WiFi. 开启后 ...

  7. LinkedHashMap和HashMap区别

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.uti ...

  8. 如何利用gatling创建一个性能测试例

    [原创博文,转载请声明出处] 基于上一篇博文介绍如何源码编译创建自己的gatling可执行工具,今天介绍一下如何基于gatling做性能测试! 由于gatling的测试例脚本是基于scala写的,所以 ...

  9. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) 一条语句实现两表同步(添加、删除、修改)

    MERGE 目标表 USING 源表 ON 匹配条件 WHEN MATCHED THEN 语句 WHEN NOT MATCHED THEN 语句; http://www.chinaz.com/prog ...

  10. Struts2 - 传值

    Struts2传值有几种方式: 1)URL parameter 例如配置代码: <action name="login_*" class="com.my.actio ...