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下yum安装jdk1.8(rpm包)和tomcat-8.5

    Java是目前可移植性较高的语言,相当火热,tomcat运行就需要Java语言环境 ========= 完美的分割线 ========= 0.java简介 1)tomcat运行需要对应的Java环境, ...

  2. ORACLE常用系统查询

    目录(?)[-] 查询系统所有对象 查看系统所有表 查看所有用户的表 查看当前用户表 查看用户表索引 查看主键 查看唯一性约束 查看外键 查看表的列属性 查看所有表空间 查看oracle最大连接数 修 ...

  3. C语言与VT100控制码编程

    C语言与VT100控制码编程 声明: . 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; . 本文在vim中编辑,请尽量是用vim进 ...

  4. MATLAB安装教程

    1.资源下载 下载官方安装包R2015b_win64.(文件太大,没上传资源) 下载破解文件包,解压其中的相应压缩包(一般是win64那个压缩包) 下载地址:链接:http://pan.baidu.c ...

  5. PR使用技巧

    1.要经常使用快捷键,这样能进步效率. 常用的快捷键是:+(放大),-(缩小),v(移动),c(切刀),x(变速),L(快放),ctrl+K(载切),ctrl+M(输出视频),ctrl+alt+M(输 ...

  6. ElasticSearch(七):ElasticSearch集群的搭建

    由于资源有限,使用是一台机器上安装三个elasticSearch服务端组成的集群. 1. 安装elasticSearch6.3.2 将原本安装的elasticSearch6.3.2复制两份,分别重新命 ...

  7. sql 语句执行顺序

    一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图 ...

  8. Xamarin版的C# SVG路径解析器

    原文:Xamarin版的C# SVG路径解析器 Xamarin版的C# SVG路径解析器,对SVG的Path路径进行解析,其中包括: 主程序SvgPathParser.cs, 相关接口定义:ISour ...

  9. smarty中调用php内置函数

    http://blog.csdn.net/clevercode/article/details/50373633

  10. jquery 1.9里面已经删除了toggle(fn1, fn2)函数:

    jquery 1.9里面已经删除了toggle(fn1, fn2)函数:引用Note: This method signature was deprecated in jQuery 1.8 and r ...