原创python爬虫代码

主要用到urllib2、BeautifulSoup模块

  1. #encoding=utf-8
  2. import re
  3. import requests
  4. import urllib2
  5. import datetime
  6. import MySQLdb
  7. from bs4 import BeautifulSoup
  8. import sys
  9. reload(sys)
  10. sys.setdefaultencoding("utf-8")
  11.  
  12. class Splider(object):
  13. def __init__(self):
  14. print u'开始爬取内容...'
  15.  
  16. ##用来获取网页源代码
  17. def getsource(self,url):
  18. headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2652.0 Safari/537.36'}
  19. req = urllib2.Request(url=url,headers=headers)
  20. socket = urllib2.urlopen(req)
  21. content = socket.read()
  22. socket.close()
  23. return content
  24.  
  25. ##changepage用来生产不同页数的链接
  26. def changepage(self,url,total_page):
  27. now_page = int(re.search('page/(\d+)',url,re.S).group(1))
  28. page_group = []
  29. for i in range(now_page,total_page+1):
  30. link = re.sub('page/(\d+)','page/%d' % i,url,re.S)
  31. page_group.append(link)
  32. return page_group
  33.  
  34. #获取字内容
  35. def getchildrencon(self,child_url):
  36. conobj = {}
  37. content = self.getsource(child_url)
  38. soup = BeautifulSoup(content, 'html.parser', from_encoding='utf-8')
  39. content = soup.find('div',{'class':'c-article_content'})
  40. img = re.findall('src="(.*?)"',str(content),re.S)
  41. conobj['con'] = content.get_text()
  42. conobj['img'] = (';').join(img)
  43. return conobj
  44.  
  45. ##获取内容
  46. def getcontent(self,html_doc):
  47. soup = BeautifulSoup(html_doc, 'html.parser', from_encoding='utf-8')
  48. tag = soup.find_all('div',{'class':'promo-feed-headline'})
  49. info = {}
  50. i = 0
  51. for link in tag:
  52. info[i] = {}
  53. title_desc = link.find('h3')
  54. info[i]['title'] = title_desc.get_text()
  55. post_date = link.find('div',{'class':'post-date'})
  56. pos_d = post_date['data-date'][0:10]
  57. info[i]['content_time'] = pos_d
  58. info[i]['source'] = 'whowhatwear'
  59. source_link = link.find('a',href=re.compile(r"section=fashion-trends"))
  60. source_url = 'http://www.whowhatwear.com'+source_link['href']
  61. info[i]['source_url'] = source_url
  62. in_content = self.getsource(source_url)
  63. in_soup = BeautifulSoup(in_content, 'html.parser', from_encoding='utf-8')
  64. soup_content = in_soup.find('section',{'class':'widgets-list-content'})
  65. info[i]['content'] = soup_content.get_text().strip('\n')
  66. text_con = in_soup.find('section',{'class':'text'})
  67. summary = text_con.get_text().strip('\n') if text_con.text != None else NULL
  68. info[i]['summary'] = summary[0:200]+'...';
  69. img_list = re.findall('src="(.*?)"',str(soup_content),re.S)
  70. info[i]['imgs'] = (';').join(img_list)
  71. info[i]['create_time'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  72. i+=1
  73. #print info
  74. #exit()
  75. return info
  76.  
  77. def saveinfo(self,content_info):
  78. conn = MySQLdb.Connect(host='127.0.0.1',user='root',passwd='',port=3306,db='test',charset='utf8')
  79. cursor = conn.cursor()
  80. for each in content_info:
  81. for k,v in each.items():
  82. sql = "insert into t_fashion_spider2(`title`,`summary`,`content`,`content_time`,`imgs`,`source`,`source_url`,`create_time`) values ('%s','%s','%s','%s','%s','%s','%s','%s')" % (MySQLdb.escape_string(v['title']),MySQLdb.escape_string(v['summary']),MySQLdb.escape_string(v['content']),v['content_time'],v['imgs'],v['source'],v['source_url'],v['create_time'])
  83. cursor.execute(sql)
  84.  
  85. conn.commit()
  86. cursor.close()
  87. conn.close()
  88.  
  89. if __name__ == '__main__':
  90. classinfo = []
  91. p_num = 5
  92. url = 'http://www.whowhatwear.com/section/fashion-trends/page/1'
  93. jikesplider = Splider()
  94. all_links = jikesplider.changepage(url,p_num)
  95. for link in all_links:
  96. print u'正在处理页面:' + link
  97. html = jikesplider.getsource(link)
  98. info = jikesplider.getcontent(html)
  99. classinfo.append(info)
  100. jikesplider.saveinfo(classinfo)

python爬虫代码的更多相关文章

  1. 动态调整线程数的python爬虫代码分享

    这几天在忙一个爬虫程序,一直在改进他,从一开始的单线程,好几秒一张图片(网络不好),,,到现在每秒钟十几张图片,,, 四个小时586万条数据,,,简直不要太爽 先上图 最终写出来的程序,线程数已经可以 ...

  2. 我不就是吃点肉,应该没事吧——爬取一座城市里的烤肉店数据(附完整Python爬虫代码)

    写在前面的一点屁话: 对于肉食主义者,吃肉简直幸福感爆棚!特别是烤肉,看着一块块肉慢慢变熟,听着烤盘上"滋滋"的声响,这种期待感是任何其他食物都无法带来的.如果说甜点是" ...

  3. 爬取汽车之家新闻图片的python爬虫代码

    import requestsfrom bs4 import BeautifulSouprespone=requests.get('https://www.autohome.com.cn/news/' ...

  4. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...

  5. 如何用Python爬虫实现百度图片自动下载?

    Github:https://github.com/nnngu/LearningNotes 制作爬虫的步骤 制作一个爬虫一般分以下几个步骤: 分析需求 分析网页源代码,配合开发者工具 编写正则表达式或 ...

  6. python爬虫实战——5分钟做个图片自动下载器

      python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...

  7. Python爬虫二

    常见的反爬手段和解决思路 1)明确反反爬的主要思路 反反爬的主要思路就是尽可能的去模拟浏览器,浏览器在如何操作,代码中就如何去实现;浏览器先请求了地址url1,保留了cookie在本地,之后请求地址u ...

  8. 利用python爬虫爬取图片并且制作马赛克拼图

    想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =. 首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我 ...

  9. Python爬虫笔记技术篇

    目录 前言 requests出现中文乱码 使用代理 BeautifulSoup的使用 Selenium的使用 基础使用 Selenium获取网页动态数据赋值给BeautifulSoup Seleniu ...

随机推荐

  1. $("<div />")代表的意思

    $("div")这个是匹配所有叫div的标签. $("<div />")表示生成一个div节点,但是div节点一般不通过这种方式,<div/& ...

  2. mvc深入理解

    对于v和c好理解, 对于model分为数据对象模型和业务逻辑模型,一般为一个类,数据对象模型包含对一个具体数据表的相关操作,业务逻辑模型为处理一些业务逻辑.

  3. Swagger 使用方法

    注:本篇文章基于Django-rest-swagger 2.0.7环境下撰写 参考英文文档: http://django-rest-swagger.readthedocs.io/en/latest/ ...

  4. VS2015 建立C++ dll库文件

    最近在写一个图片处理,正好用到C++封装DLL给C#调用,一下是总结:   建立一个C++的Win32DLL,这里要注意选择"Export symbols"导出符号.点击完成. 如 ...

  5. iOS多线程编程指南(二)线程管理

    当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体.每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片.一个线程可以和其他线程或其他进程通信,执行I/O操作,甚至执行任何 ...

  6. Sublime Text 3常用快捷键 以及package control 安装

    网络上搜索到的,现整理下来备用: package control安装 view下 ctrl+~ import urllib.request,os; pf = 'Package Control.subl ...

  7. linux下进度条的编写和实现

    实现了一个简单的进度条,主要技术啥的算不上,但有几个需要注意的点 首先是回车符,回车符可不是\n,我们可以把\n看成是两个动作的合体,分别是,回车和换行,都有自己对应的符号,这利用回车符一直在同一个位 ...

  8. linux运维的认知及RHEL7 Unix/Linux 系统 介绍和安装

    如何成为一个优秀的linux运维人员?      如果你有机会和条件:环境能够磨练一个人的能力和意志.      大胆的做你从未做过的项目,每一个项目都是对自身的极大提升.      有好的环境资源不 ...

  9. linux开启oracle服务

    linux下启动oracle su - oracle sqlplus /nolog conn /as sysdba startup exit lsnrctl start exit 2. linux下关 ...

  10. View的事件处理流程

    一直对view的事件处理流程迷迷糊糊,今天花了点时间写了个栗子把它弄明白了. 1.view的常用的事件分为:单击事件(onClick).长按事件(onLongClick).触摸事件(onTouch), ...