最近没活了,简单复习下爬虫,就去爬了下煎蛋网的妹子图和糗事百科的图片,
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框架:听说比较强悍,回头瞅瞅