Python多线程爬虫实例

前言

  大数据分析自然需要大量的数据,爬虫是获取数据的一种途径,Python是十分适合写爬虫的语言,Scrapy是Python的一个高级爬虫框架,那么学习Scrapy之前先简单实现一些爬虫例子,本文记录作者第一次实现爬虫。
未成年人请酌情阅读

正文

  首先当然要安装Python了,作者使用Python2.7.14,IDE使用PyCharm,需要准备的模块有requests、re、lxml(可以通过pip下载或者在PyCharm里面下载),软件配置和运行什么的请另找教程。
  那么准备爬取哪些网站呢?第一次操作我选择一个比较特殊的网站http://hotpics.cc/,这是一个有大量图片的成人网站,而且结构比较简单,我们今天将里面的图片爬取并保存到本地。
  首先观察网站的页数,翻页时网址变化为http://hotpics.cc/page/2/显然页数就是后面那个数字。然后用Chrome分析网站图片的代码,审查元素指向图片,容易发现图片url都在名为figure的标签内,那么我们先把figure标签提取出来再把图片的url提取出来就行了,提取标签当然是用强大的XPATH实现
Python多线程爬虫实例_第1张图片
  先放代码

# coding=utf-8
from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool
import requests
import re
import sys
import time
reload(sys)
sys.setdefaultencoding("utf-8")
def spider(url):
    print url
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
    html = requests.get(url, headers=headers) #伪装成浏览器
    selector = etree.HTML(html.text) #将网页html变成树结构,用于xpath
    content = selector.xpath('//figure[@class="post-image "]') #提取figure标签
    for each in content:
        tmp = each.xpath('a/img/@src')#把img标签的src属性提取出来
        pic = requests.get(tmp[0])#访问图片
        print 'downloading: ' + tmp[0]
        string = re.search('\d+/\d+/(.*?)\\.jpg', str(tmp[0])).group(1) #正则表达式匹配图片名字
        fp=open('pic2\\'+string+'.jpg','wb')#放到pic2文件夹内,要自己创建
        fp.write(pic.content)
        fp.close
if __name__ == '__main__':
    pool = ThreadPool(2) #双核电脑
    tot_page = []
    for i in range(1,11): #提取1到10页的内容
        link = 'http://hotpics.cc/page/' + str(i)
        tot_page.append(link)
    pool.map(spider, tot_page)#多线程工作
    pool.close()
    pool.join()


然后运行一下,一个简单的爬虫爬取图片的例子就完成了(`・ω・´)
Python多线程爬虫实例_第2张图片
Python多线程爬虫实例_第3张图片

你可能感兴趣的:(Hadoop)