urlController.py

import bsController
from urllib import request class SpiderMain(object):
def __init__(self):
self.header = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
self.bsManage = bsController.bsManage() def getUrl(self,rootUrl):
for i in range(1,500):
url = rootUrl+'%s' %i+'.html'
req = request.Request(url)
for h in self.header:
req.add_header(h, self.header[h])
try:
html = request.urlopen(req).read()
# print(html)
self.bsManage.getPageUrl(html,i)
req.close()
except request.URLError as e:
if hasattr(e, 'code'):
print('Error code:',e.code)
elif hasattr(e, 'reason'):
print('Reason:',e.reason) if __name__=='__main__':
rootUrl = 'http://www.meitulu.com/item/'
obj_root = SpiderMain()
obj_root.getUrl(rootUrl)

bsController.py

from bs4 import BeautifulSoup
from urllib import request
import os class bsManage:
def __init__(self):
self.pageUrl = 'http://www.meitulu.com/item/'
self.header = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'} # html是获取到的网页的html
# i表示i_x.html
def getPageUrl(self,html,i):
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
# 获取到最后一个连接
lastUrl = soup.find_all('div', {'id': 'pages'})[0].find_all('a')[-2]['href']
# print(html)
# print(lastUrl)
# 获取到最后一页的数字
if i < 10:
len = 1
elif i<100:
len = 2
elif i<1000:
len = 3
elif i<10000:
len = 4
lastPage = int(lastUrl[29+len:-5])
# 创建图片文件夹
if not os.path.exists('img'):
os.mkdir('img')
path = 'img/%s' %i
if not os.path.exists(path):
os.mkdir(path)
# 先爬取第一页 因为url格式不一样
# 获取所需要图片的连接 array
links = soup.find_all('img',class_='content_img')
for link in links:
name = str(link['src'])[-21:]
data = request.urlopen(link['src']).read()
img = open('img/%s/' %i + name,'wb+')
img.write(data)
img.close()
# print('%d 已经爬完' %i) # str = self.pageUrl + '%s' %i + '.html'
# print(str) # 每一个页面下有lastPage个小页面
for j in range(2,lastPage+1):
# 重新拼接url 获取到下一页的url
url = self.pageUrl + '%s_%s' %(i,j) + '.html'
self.saveImgWithUrl(url,i)
print('%d 已经爬完' %i) def saveImgWithUrl(self,url,i):
req = request.Request(url)
for h in self.header:
req.add_header(h, self.header[h])
try:
html = request.urlopen(req).read()
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
# 获取所需要图片的连接 array
links = soup.find_all('img', class_='content_img')
for link in links:
name = str(link['src'])[-21:]
data = request.urlopen(link['src']).read()
img = open('img/%s/' % i + name, 'wb+')
img.write(data)
img.close()
except request.URLError as e:
if hasattr(e, 'code'):
print('Error code:', e.code)
elif hasattr(e, 'reason'):
print('Reason:', e.reason)

python之路——爬虫实例的更多相关文章

  1. python之路 - 爬虫

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  2. 嵩天老师python网课爬虫实例1的问题和解决方法

    一,AttributeError: 'NoneType' object has no attribute 'children', 网页'tbody'没有子类 很明显,报错的意思是说tbody下面没有c ...

  3. python应用:爬虫实例(静态网页)

    爬取起点中文网某本小说实例: # -*-coding:utf8-*- import requests import urllib import urllib2 from bs4 import Beau ...

  4. python应用:爬虫实例(动态网页)

    以爬取搜狗图片为例,网页特点:采用“瀑布流”的方式加载图片,图片的真实地址存放在XHR中 #-*-coding:utf8-*- import requests import urllib import ...

  5. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  6. Python之路【第八篇】:堡垒机实例以及数据库操作

    Python之路[第八篇]:堡垒机实例以及数据库操作   堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient ...

  7. Python 爬虫实例

    下面是我写的一个简单爬虫实例 1.定义函数读取html网页的源代码 2.从源代码通过正则表达式挑选出自己需要获取的内容 3.序列中的htm依次写到d盘 #!/usr/bin/python import ...

  8. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

  9. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

随机推荐

  1. 《A First Course in Probability》-chaper1-组合分析-方程整数解的个数

    在概率论问题中求解基本事件.某个事件的可能情况数要涉及到组合分析. 而这一部分主要涉及到简单的计数原理和二项式定理.多项式定理. 我们从一个简单的实例入手. 方程的整数解个数: Tom喜欢钓鱼,一直他 ...

  2. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案

    tuning for Data Transfer hosts connected at speeds of 1Gbps or higher <一.本次OpenStack系统调试简单过程简单记录& ...

  3. ssh技巧

    1. 打通ssh key的简单方法: ssh-copyid 192.168.1.1 2.使用ssh 将Linux主机变成http代理服务器 ssh -NfD 192.168.22.1:10080 12 ...

  4. 从git上下载代码并导入eclipse

    主要分为两步: 1.先从git下载代码到本地git仓库 2.eclipse import导入存在的maven项目

  5. IOS多线程的小总结

    ios中多线程的实现方案有4种    1.pthread :一套通用的多线程API/适用于Unix\Linux\Windows等系统 (跨平台可移植/使用难度大)    C语言    几乎不用     ...

  6. VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号

    以下代码可以取得系统特征码(网卡MAC.硬盘序列号.CPU ID.BIOS编号) BYTE szSystemInfo[4096]; // 在程序执行完毕后,此处存储取得的系统特征码 UINT uSys ...

  7. HDU 5119 Happy Matt Friends(dp+位运算)

    题意:给定n个数,从中分别取出0个,1个,2个...n个,并把他们异或起来,求大于m个总的取法. 思路:dp,背包思想,考虑第i个数,取或者不取,dp[i][j]表示在第i个数时,异或值为j的所有取法 ...

  8. javabean、DTO、VO

    一.javabean 一. javabean 是什么? Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类, 就是有默然构造方法,只有get,set的方法的java类的对 ...

  9. window.applicationCache事件,介绍

    1.关于applicationCache对象 在IE和Google中 为ApplicationCache对象 而在FF中为 OfflineResourceList对象 通过ApplicationCac ...

  10. 【转】block一点也不神秘————如何利用block进行回调

    我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数时候回调是比通知方便的,所以何乐而不为呢?如果你不知道回调使用的场景,我们来假设一下: 1.我现在玩手机 2.突然手机没有电了 3.我 ...