urlController.py

  1. import bsController
  2. from urllib import request
  3.  
  4. class SpiderMain(object):
  5. def __init__(self):
  6. 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',
  7. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  8. 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  9. 'Accept-Encoding': 'none',
  10. 'Accept-Language': 'en-US,en;q=0.8',
  11. 'Connection': 'keep-alive'}
  12. self.bsManage = bsController.bsManage()
  13.  
  14. def getUrl(self,rootUrl):
  15. for i in range(1,500):
  16. url = rootUrl+'%s' %i+'.html'
  17. req = request.Request(url)
  18. for h in self.header:
  19. req.add_header(h, self.header[h])
  20. try:
  21. html = request.urlopen(req).read()
  22. # print(html)
  23. self.bsManage.getPageUrl(html,i)
  24. req.close()
  25. except request.URLError as e:
  26. if hasattr(e, 'code'):
  27. print('Error code:',e.code)
  28. elif hasattr(e, 'reason'):
  29. print('Reason:',e.reason)
  30.  
  31. if __name__=='__main__':
  32. rootUrl = 'http://www.meitulu.com/item/'
  33. obj_root = SpiderMain()
  34. obj_root.getUrl(rootUrl)

bsController.py

  1. from bs4 import BeautifulSoup
  2. from urllib import request
  3. import os
  4.  
  5. class bsManage:
  6. def __init__(self):
  7. self.pageUrl = 'http://www.meitulu.com/item/'
  8. self.header = {
  9. 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  10. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  11. 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  12. 'Accept-Encoding': 'none',
  13. 'Accept-Language': 'en-US,en;q=0.8',
  14. 'Connection': 'keep-alive'}
  15.  
  16. # html是获取到的网页的html
  17. # i表示i_x.html
  18. def getPageUrl(self,html,i):
  19. soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
  20. # 获取到最后一个连接
  21. lastUrl = soup.find_all('div', {'id': 'pages'})[0].find_all('a')[-2]['href']
  22. # print(html)
  23. # print(lastUrl)
  24. # 获取到最后一页的数字
  25. if i < 10:
  26. len = 1
  27. elif i<100:
  28. len = 2
  29. elif i<1000:
  30. len = 3
  31. elif i<10000:
  32. len = 4
  33. lastPage = int(lastUrl[29+len:-5])
  34. # 创建图片文件夹
  35. if not os.path.exists('img'):
  36. os.mkdir('img')
  37. path = 'img/%s' %i
  38. if not os.path.exists(path):
  39. os.mkdir(path)
  40. # 先爬取第一页 因为url格式不一样
  41. # 获取所需要图片的连接 array
  42. links = soup.find_all('img',class_='content_img')
  43. for link in links:
  44. name = str(link['src'])[-21:]
  45. data = request.urlopen(link['src']).read()
  46. img = open('img/%s/' %i + name,'wb+')
  47. img.write(data)
  48. img.close()
  49. # print('%d 已经爬完' %i)
  50.  
  51. # str = self.pageUrl + '%s' %i + '.html'
  52. # print(str)
  53.  
  54. # 每一个页面下有lastPage个小页面
  55. for j in range(2,lastPage+1):
  56. # 重新拼接url 获取到下一页的url
  57. url = self.pageUrl + '%s_%s' %(i,j) + '.html'
  58. self.saveImgWithUrl(url,i)
  59. print('%d 已经爬完' %i)
  60.  
  61. def saveImgWithUrl(self,url,i):
  62. req = request.Request(url)
  63. for h in self.header:
  64. req.add_header(h, self.header[h])
  65. try:
  66. html = request.urlopen(req).read()
  67. soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
  68. # 获取所需要图片的连接 array
  69. links = soup.find_all('img', class_='content_img')
  70. for link in links:
  71. name = str(link['src'])[-21:]
  72. data = request.urlopen(link['src']).read()
  73. img = open('img/%s/' % i + name, 'wb+')
  74. img.write(data)
  75. img.close()
  76. except request.URLError as e:
  77. if hasattr(e, 'code'):
  78. print('Error code:', e.code)
  79. elif hasattr(e, 'reason'):
  80. 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. 也谈BIO | NIO | AIO (Java版--转)

    关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BIO | NIO | AIO,本身的描述都是在Java语言的基础上的.而描述IO,我们需要从两个 ...

  2. lyGrid表格插件

     表格基础参数: grid = lyGrid({           l_column : [{//表格列表数据                 colkey : null,              ...

  3. CentOS6.5 mini开启网络

    1.编辑network配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 1 2 3 4 5 6 7 DEVICE=eth0 HWADDR=00:0C:2 ...

  4. 在asp.net中使用confirm可以分为两种:

    在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...

  5. easyUI属性总结

    1.div easyui-window        生成一个window窗口样式.      属性如下:                   1)modal:是否生成模态窗口.true[是] fal ...

  6. redis linux 基本命令

    找到一个哥们 写的都是一步步打基础的学习东西 不光是知识也是学习方式 都值得学习.. reids 传送们-->> http://xuelianbobo.iteye.com/category ...

  7. geektool--一款很geek的工具

    2016/12/18 今天尝试一款很geek的工具 geektool 听名字就超级geek有木有 get it geektool website 从官网直接下载app,一键傻瓜式安装. use it ...

  8. jquery ajaxform上传文件返回不提示信息的问题

    在使用jquery的ajaxform插件进行ajax提交表单并且上传文件的时候,返回类型datatype :json但是后台通过写出一个json对象后,在执行完以后没有进入success函数,而是直接 ...

  9. [转载]Android利用convertView优化ListView性能

    本的getView写法 Java代码public View getView(int position, View convertView, ViewGroup parent) {View view = ...

  10. spring mvc使用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext和XmlWebApplicationContext类的操作其中 XmlWebApplicationContext是专为Web工程定制的。

    一.简单的用ApplicationContext做测试的话,获得Spring中定义的Bean实例(对象).可以用: ApplicationContext ac = new ClassPathXmlAp ...