一个简单的爬虫


#网页状态码
#200 正常
#404 网页找不到
#502 504
import requests
from multiprocessing import Pool def get(url):
response = requests.get(url)
if response.status_code == 200:
return url, response.content.decode('utf-8') def call_back(args):
url,content = args #拆包args中传入的参数
print(url,len(content)) if __name__ == '__main__':
url_lst = [
'https://www.cnblogs.com',
'https://www.sogou.com',
'http://www.sohu.com',
'http://www.baidu.com'
]
p = Pool(5)
for url in url_lst:
p.apply_async(get,args=(url,),callback=call_back) #利用callback去用主进程执行Call_back函数中的功能
p.close()
p.join()

爬虫进阶

import re
from urllib.request import urlopen
from multiprocessing import Pool def get_page(url,pattern):
response=urlopen(url).read().decode('utf-8')
return pattern,response #正则表达式编译结果,网页内容 def parse_page(info):
pattern,page_content=info
res=re.findall(pattern,page_content)
for item in res:
dic={
'index':item[0].strip(),
'title':item[1].strip(),
'actor':item[2].strip(),
'time':item[3].strip(),
}
print(dic)
if __name__ == '__main__':
regex = r'<dd>.*?<.*?class="board-index.*?>(\d+)</i>.*?title="(.*?)".*?class="movie-item-info".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>'
pattern1=re.compile(regex,re.S) url_dic={
'http://maoyan.com/board/7':pattern1,
} p=Pool()
res_l=[]
for url,pattern in url_dic.items():
res=p.apply_async(get_page,args=(url,pattern),callback=parse_page)
res_l.append(res) for i in res_l:
i.get() >>>
{'index': '1', 'title': '传奇的诞生', 'actor': '主演:凯文·德·保拉,贝利,索·豪黑', 'time': '上映时间:2018-09-07'}
{'index': '2', 'title': '大寒', 'actor': '主演:张双兵,鲁园,许薇', 'time': '上映时间:2018-08-14'}
{'index': '3', 'title': '苏丹', 'actor': '主演:萨尔曼·汗,安努舒卡·莎玛,兰迪普·弘达', 'time': '上映时间:2018-08-31'}
{'index': '4', 'title': '爸,我一定行的', 'actor': '主演:郑润奇,郑鹏生,张咏娴', 'time': '上映时间:2018-08-24'}
{'index': '5', 'title': '李宗伟:败者为王', 'actor': '主演:李宗伟,李国煌,杨雁雁', 'time': '上映时间:2018-09-07'}
{'index': '6', 'title': '悲伤逆流成河', 'actor': '主演:赵英博,任敏,辛云来', 'time': '上映时间:2018-09-21'}
{'index': '7', 'title': '碟中谍6:全面瓦解', 'actor': '主演:汤姆·克鲁斯,亨利·卡维尔,文·瑞姆斯', 'time': '上映时间:2018-08-31'}
{'index': '8', 'title': '快把我哥带走', 'actor': '主演:张子枫,彭昱畅,赵今麦', 'time': '上映时间:2018-08-17'}
{'index': '9', 'title': '赛尔号大电影6:圣者无敌', 'actor': '主演:罗玉婷,翟巍,王晓彤', 'time': '上映时间:2017-08-18'}
{'index': '10', 'title': '念念手纪', 'actor': '主演:滨边美波,北村匠海,北川景子', 'time': '上映时间:2018-09-14'}

正则表达式的在线校验网站

http://tool.chinaz.com/regex

Python并发编程-一个简单的爬虫的更多相关文章

  1. Python并发编程-一个简单的多进程实例

    import time from multiprocessing import Process import os def func(args,args2): #传递参数到进程 print(args, ...

  2. [Python网络编程]一个简单的TCP时间服务器

    服务器端: 1.创建一个面向网络的TCP套接字对象socket, 2.绑定地址和端口 3.监听 4.当有客户端连接时候,接受连接并给此连接分配一个新的套接字 5.当客户端发送空信息时候,关闭新分配的套 ...

  3. Python网络编程 - 一个简单的客户端Get请求程序

    import socket target_host = "www.baidu.com" target_port = 80 # create a socket object clie ...

  4. python (1)一个简单的爬虫: python 在windows下 创建文件夹并写入文件

    1.一个简单的爬虫:爬取豆瓣的热门电影的信息 写在前面:如何创建本来存在的文件夹并写入 t_path = "d:/py/inn" #本来不存在inn,先定义路径,然后如果不存在,则 ...

  5. python爬虫系列(1)——一个简单的爬虫实例

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容:分析html中 ...

  6. Python并发编程之深入理解yield from语法(八)

    大家好,并发编程 进入第八篇. 直到上一篇,我们终于迎来了Python并发编程中,最高级.最重要.当然也是最难的知识点--协程. 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解.当然不了解 ...

  7. Python并发编程二(多线程、协程、IO模型)

    1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...

  8. Python并发编程理论篇

    Python并发编程理论篇 前言 其实关于Python的并发编程是比较难写的一章,因为涉及到的知识很复杂并且理论偏多,所以在这里我尽量的用一些非常简明的语言来尽可能的将它描述清楚,在学习之前首先要记住 ...

  9. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mult ...

随机推荐

  1. Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作

    使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...

  2. time_t与GMT格式互转

    time_t Time::timeFromGMT(string gmt) { char week[4]; memset(week,0,4); char month[4]; memset(month,0 ...

  3. redis服务启动脚本

    /etc/rc.d/init.d/redis #!/bin/sh# chkconfig: 2345 80 90 # description: Start and Stop redis REDISPOR ...

  4. html跑马灯效果

    实现跑马灯的方法很多,其中最简单的是采用一句Html代码来实现,我们在需要出现跑马灯效果的地方插入“<marquee>滚动的文字</marquee>”语句,它的效果如下所示: ...

  5. 使用 WebSockets 技术的 9 个应用场景

    没有其他技术能够像WebSocket一样提供真正的双向通信,许多web开发者仍然是依赖于ajax的长轮询来实现.对Websocket缺少热情,也许是因为多年前他的安全性的脆弱,抑或者是缺少浏览器的支持 ...

  6. 【POJ】3233 Matrix Power Series

    [算法]二分+矩阵快速幂 [题意]给定矩阵A和整数k,MOD,求A^0+A^1+A^2+...+A^k. [题解] 定义题目要求的答案为f(n),即: $$f_n=\sum_{i=0}^{n}A^i$ ...

  7. 【BZOJ】1485: [HNOI2009]有趣的数列

    [算法]Catalan数 [题解] 学了卡特兰数就会啦>_<! 因为奇偶各自递增,所以确定了奇偶各自的数字后排列唯一. 那么就是给2n个数分奇偶了,是不是有点像入栈出栈序呢. 将做偶数标为 ...

  8. 【BZOJ2882】【字符串的最小表示】工艺

    题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...

  9. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  10. NYOJ 117 求逆序数 (树状数组)

    题目链接 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出 ...