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. Linux下XordDos木马的清除

    朋友的阿里云服务器一早上报木马入侵,找我处理,登陆阿里云查看警告信息“恶意进程(云查杀)-XorDDoS木马”, 本文也可以作为服务器处理木马排查的步骤的参考文章 排查原则: 1.一般的木马都有多个守 ...

  2. shell 脚本实战笔记(10)--spark集群脚本片段念念碎

    前言: 通过对spark集群脚本的研读, 对一些重要的shell脚本技巧, 做下笔记. *). 取当前脚本的目录 sbin=`dirname "$0"` sbin=`cd &quo ...

  3. linux-推荐两款好用的录屏软件

    前言 测试程序过程中需要看运行效果如何,可以使用录屏软件进行回放. 软件安装 添加源:sudo add-apt-repository ppa:maarten-baert/simplescreenrec ...

  4. Hihocoder1883 : 生成树问题(并查集+树剖+线段树)

    描述 有一个无向图,有n个点,m1条第一类边和m2条第二类边.第一类边有边权,第二类边无边权.请为第二类的每条边定义一个边权,使得第二类边可能全部出现在该无向图的最小生成树上,同时要求第二类边的边权总 ...

  5. IIS7中Ajax.AjaxMethod无效的原因及解决方法

    使用Ajax.AjaxMethod方法在asp.net的服务器下一切正常,用iis的时候,js中总是cs类找不到,具体的解决方法如下,遇到类似情况的朋友可以参考下 最近做用Ajax.AjaxMetho ...

  6. Windows 10中更新Anaconda和第三方包

    =============================== 作为专业的Python开发者,Anaconda包肯定很熟悉 下面总结一下Anaconda的升级和维护 步骤一: 打开cmd,切换到Ana ...

  7. 关于jdbc的面试题

    什么是JDBC,在什么时候会用到它? JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql ...

  8. Uboot启动命令使用

    1.查看根文件系统中的内容 打断Uboot的启动,默认从SD卡启动,查看根文件系统中/boot下的内容(根文件系统在mmcblk0p1上):=> mmc rescan=> ext4ls m ...

  9. 时间操作(JavaScript版)—页面显示格式:年月日 上午下午 时分秒 星期

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/35222531 <!DOCTYPE ...

  10. Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复

    Oracle RAC 中OCR 和Voting Disk 备份在我的blog: Oracle RAC 常用维护工具和命令 中已经有说明,现在再次把它单独拿出做一个说明, 因为OCR 和Voting D ...