python图片小爬虫

最近没活了,简单复习下爬虫,就去爬了下煎蛋网的妹子图和糗事百科的图片,
python做爬虫和模拟登陆来说最适合不过了,除了各种强大的库,也只需很少的代码量就能完成功能。

我理解的python爬虫

我理解的python爬虫,利用urllib2(自带库) 、httplib(httplib是一个相对底层的http请求模块,urlib就是基于httplib封装的)、requests(我个人喜欢用这个)等库去发送http请求,然后将请求到的html页面,或者ajax返回的xml、json或者js等进行解析,用pyquery(我个人喜欢用这个)、BeautifulSoup(from bs4 import BeautifulSoup一般这么引用)、lxml(解析xml)、xpath(没怎么用过)、HTMLParser(from html.parser import HTMLParser一般这么引用)等

http协议

你一定要对http协议有了解,在此基础上对网页进行解析,其实说白了就是拿一些网页信息进行解析

模拟登陆

在抓取网页的基础上,我们要做一个模拟人去做用户登录,然后去拿我的订单号啊等等的就是模拟登陆,基本是加入post中的data信息去做登陆。

robots协议

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
https://www.baidu.com/robots.txt
我在任何web官网的url后边+/robots.txt就可看到每个官网允许或者不允许爬的内容,也没啥用,让你不爬你就不爬啊。

煎蛋网妹子图爬虫实例:

import requests
from pyquery import PyQuery as pq
import time

for page in range(1720, 1501, -1):
    url = "http://jandan.net/ooxx/page-%s#comments" % page
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8',
        'Host': 'jandan.net',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
        # 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/47.0.2526.73 Chrome/47.0.2526.73 Safari/537.36'
        # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'
        # 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'
    }
    time.sleep(2)
    response = requests.session().get(url, headers=headers, timeout=50, verify=False)
    print response

    b = pq(response.content)
    path = b('div[class="text"] p')
    img = path('img')
    for i in img:
        time.sleep(1)
        img_url = i.values()[0].decode('utf-8')
        filename = img_url.split('/')[-1]
        print img_url, '-' * 30, filename
        r = requests.get(img_url, stream=True).content
        file('/root/Desktop/testpachong/MM/page%s_img%s' %
             (page, filename), 'a').write(r)
        print page
print 'done'
# JanDanWangMeiZiTu

糗事百科图片实例:

# coding:utf-8
import re
import urllib
import urllib2

a = 1
for page in xrange(1, 36):
    a += 1
    url = 'http://www.qiushibaike.com/imgrank/page/%s' % page

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36'
    }
    request = urllib2.Request(url, headers=headers)
    response = urllib2.urlopen(request)
    html = response.read().decode('utf-8')
    imglist = re.findall('img src="(.*?)\.jpg"', html)
    i = 1
    for img in imglist:
        i += 1
        imgfile = urllib.urlopen(img + '.jpg')
        file('/root/Desktop/testpachong/QiuShiBaiKe/page%s_img%s.jpg' % (page, i), 'wb').write(imgfile.read())

python爬虫还有个scrapy框架:听说比较强悍,回头瞅瞅


热评文章