import os
import threading
import re
import time
from lxml import etree all_img_urls = [] # 图片列表页面的数组 g_lock = threading.Lock() # 初始化一个锁 # 声明一个生产者的类,来不断地获取图片详情页地址,然后添加到 all_img_url列表中 # url = "http://www.xiaohuar.com/" all_urls = [] class Spider(object):
# 构造函数,初始化数据实用
def __init__(self,target_url,headers):
self.target_url = target_url
self.headers = headers # 获取所有的想要抓取的URL
def getUrls(self,start_page,page_num):
for i in range(start_page,page_num):
url = self.target_url % i
all_urls.append(url) if __name__ == '__main__':
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
"Host":"eclick.baidu.com", }
target_url = "http://www.xiaohuar.com/list-1-%d.html" # 抓取链接的样式 spider = Spider(target_url,headers) # 抓取链接的对象传入 链接与请求头
spider.getUrls(0,14) # 抓取的多少页面的链接
# print (all_urls) class Producer(threading.Thread): #创建一个生产者用来批量的'生产'链接 def run(self):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
"Host": "eclick.baidu.com", } while len(all_urls) > 0: # 这里写了一个死循环,为的是能够一直抓取为爬去数据的链接
g_lock.acquire() # 锁,为的是不让不同的线程共同使用同一条连接
# for url in all_urls:
url = all_urls.pop() # 使用pop方法,可以获取链接
g_lock.release() # 获取连接后 释放锁,让其他线程可前去列表中获取链接
response = requests.get(url,headers).text selector = etree.HTML(response) # 使用xpath mods = selector.xpath("//div[@class='item_t']") # 获取指定标签 for i in mods:
img_link = i.xpath("div[@class='img']/a/img/@src")
name = i.xpath("div[@class='img']/span/text()")
name = name[0].encode("utf8")
img_link = img_link[0].encode("utf8") comment = {name: img_link}
if img_link.startswith("/"): # 因为抓取的链接,有一部分是本地,所以在此处将之拼接成可直接访问的url
str = "http://www.xiaohuar.com"
img_link = str + img_link
comment = {name: img_link}
all_img_urls.append(comment)
all_img_urls.append(comment) for x in range(10): # 创建10个线程用来爬去链接
down = Producer()
down.run()
# print all_img_urls class DownPic(threading.Thread): # 用来下载爬取数据的类 def run(self):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
"Host": "eclick.baidu.com", } while True: # 这个地方写成死循环,为的是不断监控图片链接数组是否更新
g_lock.acquire()
if len(all_img_urls) == 0: #没有图片了,就解锁
g_lock.release()
continue
else:
img = all_img_urls.pop()
g_lock.release()
# 遍历字典列表
for key,value in img.items():
path = "xiaohua/%s.jpg"% key.decode("utf8")
response = requests.get(value)
# print path
with open (path,"wb") as f:
f.write(response.content)
f.close()#
# #
#
#
for x in range(10):
down = DownPic()
down.run()

目前学习的爬取小数据图片zzz的更多相关文章

  1. scrapy爬虫爬取小姐姐图片(不羞涩)

    这个爬虫主要学习scrapy的item Pipeline 是时候搬出这张图了: 当我们要使用item Pipeline的时候,要现在settings里面取消这几行的注释 我们可以自定义Item Pip ...

  2. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  3. python 爬虫入门----案例爬取上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. ...

  4. Python-王者荣耀自动刷金币+爬取英雄信息+图片

    前提:本文主要功能是 1.用python代刷王者荣耀金币 2.爬取英雄信息 3.爬取王者荣耀图片之类的. (全部免费附加源代码) 思路:第一个功能是在基于去年自动刷跳一跳python代码上面弄的,思路 ...

  5. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  6. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  7. (python爬取小故事网并写入mysql)

    前言: 这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手 ...

  8. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  9. 如何使用Python爬取基金数据,并可视化显示

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Will的大食堂,作者打饭大叔 前言 美国疫情越来越严峻,大选也进入 ...

随机推荐

  1. 修改类不重启tomcat 自动加载项目

    可以修改类不用重启Tomcat加载整个项目(手工启动)     配置reloadable=true(自动重载)     使用Debug模式,前提是仅限于局部修改.(修改类不用重启--热加载) Tomc ...

  2. ubuntu vsftpd

    With a bit of playing around I've managed to come up with a semi solution (not perfect but good enou ...

  3. memset,memcpy,strcpy

    http://www.cppblog.com/junfeng568/archive/2006/03/11/4022.html

  4. 【linux】使用swap文件恢复非正常关闭的文件

    前言 使用vim的时候,文件编辑过程中可能会出现bug,导致非正常关闭.为了保存刚刚修改的内容,需要对文件进行恢复. 操作过程 1.查看目录文件 zrj@zrj-ThinkPad-E470:~/wor ...

  5. [Machine Learning & Algorithm] 随机森林(Random Forest)-转载

    作者:Poll的笔记 博客出处:http://www.cnblogs.com/maybe2030/  阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 ...

  6. TF-IDF算法(1)—算法概述

    假设现在有一篇很长的文章,要从中提取出它的关键字,完全不人工干预,那么怎么做到呢?又有如如何判断两篇文章的相似性的这类问题,这是在数据挖掘,信息检索中经常遇到的问题,然而TF-IDF算法就可以解决.这 ...

  7. 大家一起做训练 第一场 B Tournament

    题目来源:CodeForce #27 B 有n个人比赛,两两之间都有一场比赛,一共 n * (n - 1) / 2 场比赛.每场比赛的记录方式是 a b,表示在a和b的比赛中,a胜出,b失败. 经过研 ...

  8. [团队项目]SCRUM项目6.0 7.0

    6.0----------------------------------------------------- sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉 ...

  9. MySQL账号安全设置

    ======================================================================== 推荐账号安全设置 在数据库服务器上严格控制操作系统的账 ...

  10. Open-sourcing sso, the way we secure services at BuzzFeed

    文章来源: https://tech.buzzfeed.com/unleashing-the-a6a1a5da39d6 说明: 设计有好多地方值得借鉴,粘贴过来的排版不好 Today we are o ...