爬虫实例(二):多线程,多进程对网页的爬取

采用多线程对韩寒的微博进行爬取,这个只是不需要进行模拟登陆的:

 1 #--coding:utf-8---
 2 #!/usr/bin/env python
 3 import urllib
 4 import os
 5 import re
 6 import time
 7 from threading import Thread
 8 from multiprocessing import Process
 9
10 def downloadURL(urls,dirpath):
11     ##在之前中分装一个list
12     for url in urls:
13         if(len(url)>0):
14             content=urllib.urlopen(url).read()
15             ##采用os模块中IO接口写写html文档
16             if not os.path.exists(dirpath):
17                 os.makedirs(dirpath)
18             open(dirpath+r‘/‘+url[-26:],‘w‘).write(content)
19
20
21 def parseTarget(url):
22     root_url=url
23     urls=[]
24     ##这里得到的东西是每一篇文章的链接
25     content=urllib.urlopen(root_url).read()
26
27
28     pattern=r‘<a title="(.*?)" href="(.*?)">‘
29
30     hrefs=re.findall(pattern,content)
31
32     for href in hrefs:
33         #print href
34         urls.append(href[1])
35
36     return urls
37
38 def thread_or_process_job(n,thread_or_process,url_lists,job):
39     local_time=time.time()
40     ##args为前面函数的参数
41     Thread_or_Process=[thread_or_process(target=job,args=(url_lists[i],str(n)+thread_or_process.__name__)) for i in xrange(n)]
42
43
44     for t in Thread_or_Process:
45         t.start()
46
47     for t in Thread_or_Process:
48         t.join()
49
50     print n,thread_or_process.__name__," run job need ",time.time()-local_time
51
52 if __name__==‘__main__‘:
53     t=time.time()
54     urls=[]
55     for i in xrange(5):
56         urls.extend(parseTarget(‘http://blog.sina.com.cn/s/articlelist_1191258123_0_‘+str(i+1)+‘.html‘))
57     url_len=len(urls)
58     print ‘urls_len:‘,len(urls)
59
60     for n in[2,4,6,8]:
61         url_list=[]
62         url_split_len=url_len//n
63         ##将总的url进行分为多少段同时进行处理
64         for i in xrange(n):
65             if i==n-1:
66                 url_list.append(urls[i*url_split_len:url_len])
67             else:
68                 url_list.append(urls[i*url_split_len:(i+1)*url_split_len])
69
70             thread_or_process_job(n,Thread,url_list,downloadURL)
71             thread_or_process_job(n,Process,url_list,downloadURL)
72
73     print "All done in ",time.time()-t
74     
时间: 2025-01-14 01:44:06

爬虫实例(二):多线程,多进程对网页的爬取的相关文章

python爬虫(二):向网页提交数据

python爬虫(二):向网页提交数据 回忆一下,我们有的时候在看一些网站的时候,是否遇见过一些网站里面的信息开始显示一部分,然后当我们把鼠标滑轮向下拉动后,又显示出一些信息.这就是异步加载.我的上一篇文章python爬虫百度贴吧标题数据爬取的所有标题都是页面已经加载好的.但是对于这种开始没有加载好的数据我们应该如何爬取呢? 接下来我们先介绍下一些概念: 异步加载:举个简单的例子就是说,假如老师判作业,有两种情况,第一种就是无论哪个学生先写完,都等待到所有的同学全部写完,老师讲所有的作业都收齐后

网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文

网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文 1.前言 最新在公司做一个项目,需要一些文章类的数据,当时就想到了用网络爬虫去一些技术性的网站爬一些,当然我经常去的就是博客园,于是就有下面的这篇文章. 2.准备工作 我需要把我从博客园爬取的数据,保存起来,最好的方式当然是保存到数据库中去了,好了我们先建一个数据库,在来一张表,保存我们的数据,其实都很简单的了啊,如下图所示 BlogArticleId博文自增ID,BlogTitle博文标题,BlogUrl博文地

PHP 爬虫体验(三) - 使用PHP + puppeteer爬取js动态渲染的页面内容

之前写的两篇爬虫体验基本上涵盖了一般的Html页面提取场景,但是有些时候,如果目标页面不是纯静态的页面,而是使用js动态渲染的页面(比如one),之前的爬虫就不好使了,这种时候就要借助一些其他工具来进行实现. 一般爬取动态页面的思路是通过软件模拟浏览器行为获取到渲染后的页面镜像,然后再对渲染后的页面进行分析,常用的工具有selenium,phantomJs,puppeteer等,通过对项目维护程度.对PHP友好度的对比,我选用的是puppeteer. 根据官方介绍,谷歌在2017年开发了自家Ch

Python3 爬虫实例(一)-- 简单网页抓取

爬虫之前 在着手写爬虫之前,要先把其需要的知识线路理清楚. 第一:了解相关Http协议知识 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 2616.RFC 2616定

Python网络爬虫技巧小总结,静态、动态网页轻松爬取数据

很多人学用python,用得最多的还是各类爬虫脚本:有写过抓代理本机验证的脚本,有写过自动收邮件的脚本,还有写过简单的验证码识别的脚本,那么我们今天就来总结下python爬虫抓站的一些实用技巧. 静态网页 对于静态网页的爬虫不用多说大家也都知道,因为爬取静态网页非常的简单,只要用requests直接把html爬取下来然后用正则表达式匹配就可以了. 动态网页 相对于静态网页的简单,但是动态网页的就会相对而而言会复杂一下,而且现在互联网的发展速度,动态网页是最多的,静态网页是比较少的,不过他有张良计

requests实例2:亚马逊网站商品网页的爬取

这个网页具备检测爬虫和浏览器访问的功能. 因此为了成功爬取该网页,我们需要伪装requests的headers(把爬虫伪装成一个浏览器) 代码如下: 1 import requests 2 url = "http://www.amazon.cn/gp/product/B01M8L5Z3Y" 3 try: 4 kv = {'user-agent':'Mozilla/5.0'} 5 r = requests.get(url, headers=kv) 6 r.raise_for_status

Python爬虫入门【7】: 蜂鸟网图片爬取之二

蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文档必备 :https://aiohttp.readthedocs.io/en/stable/ 接下来就可以开始写代码了. 我们要爬取的页面,这一次选取的是 http://bbs.fengniao.com/forum/forum_101_1_lastpost.html 打开页面,我们很容易就获取到了页

爬虫学习(七)——带cookie的网页进行爬取

# 前提:# # 通常,很多网站需要登录才能进行浏览,所以在爬取这些网站时,也需要进行登录,并拿取登录时的cookie# # 登录网页,服务器会给客户端一个牌子cookie# # 访问登录页面时,带着牌子进行请求才能返回响应# # 登录界面的爬取 # 做法: # 找到牌子,带着牌子进行请求 # cookie有的在请求头里 # 如下是在登录后的页面中找到请求头里的cookie,然后进行请求,访问其含登陆信息的页面 import urllib.requestimport urllib.parse #

PHP爬虫:百万级别知乎用户数据爬取与分析

抓取了110万的用户数据,数据分析结果如下: 开发前的准备 安装Linux系统(Ubuntu14.04),在VMWare虚拟机下安装一个Ubuntu: 安装php5.6或以上版本: 安装MySQL5.5或以上版本: 安装curl.pcntl扩展. 使用PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库. 本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能访问.当我们在浏览器的页面中点击一个用户头像链接进入