提交 5f0d5245 编写于 作者: 梦想橡皮擦's avatar 梦想橡皮擦 💬

案例2修复装修美图

上级 5dff35d0
import requests
import threading # 多线程模块
import re # 正则表达式模块
import time # 时间模块
import os # 目录操作模块
# 图片列表页面的数组
all_img_urls = []
# 初始化一个锁
g_lock = threading.Lock()
# 我们拼接好的图片集和列表路径
all_urls = []
# 图片地址列表
pic_links = []
class Spider():
# 构造函数,初始化数据使用
def __init__(self, target_url, headers):
self.target_url = target_url
self.headers = headers
# 获取所有的想要抓取的 URL
def getUrls(self, start_page, page_num):
global all_urls
# 循环得到URL
for i in range(start_page, page_num+1):
url = self.target_url % i
all_urls.append(url)
# 生产者,负责从每个页面提取图片列表链接
class Producer(threading.Thread):
def run(self):
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
'HOST': 'home.fang.com'
}
global all_urls
while len(all_urls) > 0:
# 在访问all_urls的时候,需要使用锁机制
g_lock.acquire()
# 通过pop方法移除最后一个元素,并且返回该值
page_url = all_urls.pop()
# 使用完成之后及时把锁给释放,方便其他线程使用
g_lock.release()
try:
print("分析"+page_url)
response = requests.get(page_url, headers=headers, timeout=3)
# 提取详情页地址的正则表达式,需要重新编写
all_pic_link = re.findall(
'<a href="(.*?)" title=".*?" target="_blank">', response