urllib3下简单爬虫的创建流程。

Y25


  1. 导入需要使用的模块(建议用到什么,导什么)
  2. 创建网络请求对象,禁用urllib3警告(可写可不写),模拟浏览器访问
  3. 定义函数实现网络数据爬取的功能
  4. 设置主进程(__ name __==’ __ main __’)下的需要获取数据的网址链接
  5. 定义函数完成页面数据下载(根据页面的布局设置逻辑)

# 导入urllib3模块,os文件操作模块,time时间模块
import urllib3, os, time
# 导入lxml库中的额etree,方便解析数据
from lxml import etree
# 导入进程池
from multiprocessing import Pool

# 创建网络请求对象
http = urllib3.PoolManager()
# 禁用urllib3警告(urllib3在进行https请求时,可能会抛出对应的警告,可以设置disable_warnings禁用对应的警告)
urllib3.disable_warnings()
# 模拟浏览器访问网页
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36', 'Content-type':'text/json'}

# 定义函数完成网络数据爬取(可传入回调函数和网络链接,或者直接传入网络链接)
def get_net_data(url, method='get', callBack=None):
	# 发送网络请求
    response = http.request(method,url,headers=header, retries=5)
    # 回调函数不为空,返回对应数据
    if callBack is not None:
        callBack(response.data)
    # 只传入网络链接的下,直接利用etree方法,解析提取html页面数据的方式。转化为节点树的方式
    else:
        return etree.HTML(response.data)

# 定义函数完成页面数据下载
def download_page(url):
	# 调用get_net_data函数爬取对应网站数据
    data = get_net_data(url)
    # 根据对应的节点路径表达式来选取网页中的节点或节点集
    srcs = data.xpath("//ul[@class='new-img']/ul/li/a/img/@src")
    titles = data.xpath("//ul[@class='new-img']/ul/li/a/@title")

    for j in range(len(srcs)):
        os.mkdir('img/{0}'.format(titles[j]))
        response = http.request('get',srcs[j],headers=header)
        f = open('img/{0}/{1}'.format(titles[j],srcs[j].split('-')[-1]),'wb+')
        f.write(response.data)
        print('第%s张下载完成'%j)
        f.close()

# 设置主进程
if __name__ == '__main__':
    url = "http://www.7160.com/yulebagua/"
    # 创建进程池,实现多个进程同步执行的操作,并且方便管理多进程。(实现5个进程同时执行任务)
    pool = Pool(5)
    # apply_async用来向进程池中添加一个异步执行的进程。 apply则用来向进程池中添加一个同步执行的融进程。
    pool.apply_async(download_page, args=(url,))
    # 关闭进程池,一旦进程池调用close操作,此后,进程池不再接受任何进程任务。
    pool.close()
    # 设置主进程等待子进程任务执行完毕
    pool.join()
    

结果展示:
在这里插入图片描述

个人小结,定有不足,欢迎指点。
谢谢~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值