Python实现的爬虫功能代码


Posted in Python onJune 24, 2017

本文实例讲述了Python实现的爬虫功能。分享给大家供大家参考,具体如下:

主要用到urllib2、BeautifulSoup模块

#encoding=utf-8
import re
import requests
import urllib2
import datetime
import MySQLdb
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class Splider(object):
  def __init__(self):
  print u'开始爬取内容...'
  ##用来获取网页源代码
  def getsource(self,url):
  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'}
  req = urllib2.Request(url=url,headers=headers)
  socket = urllib2.urlopen(req)
  content = socket.read()
  socket.close()
  return content
  ##changepage用来生产不同页数的链接
  def changepage(self,url,total_page):
    now_page = int(re.search('page/(\d+)',url,re.S).group(1))
  page_group = []
  for i in range(now_page,total_page+1):
    link = re.sub('page/(\d+)','page/%d' % i,url,re.S)
    page_group.append(link)
  return page_group
  #获取字内容
  def getchildrencon(self,child_url):
  conobj = {}
  content = self.getsource(child_url)
  soup = BeautifulSoup(content, 'html.parser', from_encoding='utf-8')
  content = soup.find('div',{'class':'c-article_content'})
  img = re.findall('src="(.*?)"',str(content),re.S)
  conobj['con'] = content.get_text()
  conobj['img'] = (';').join(img)
  return conobj
  ##获取内容
  def getcontent(self,html_doc):
  soup = BeautifulSoup(html_doc, 'html.parser', from_encoding='utf-8')
  tag = soup.find_all('div',{'class':'promo-feed-headline'})
  info = {}
  i = 0
  for link in tag:
    info[i] = {}
    title_desc = link.find('h3')
    info[i]['title'] = title_desc.get_text()
    post_date = link.find('div',{'class':'post-date'})
    pos_d = post_date['data-date'][0:10]
    info[i]['content_time'] = pos_d
    info[i]['source'] = 'whowhatwear'
    source_link = link.find('a',href=re.compile(r"section=fashion-trends"))
    source_url = 'http://www.whowhatwear.com'+source_link['href']
    info[i]['source_url'] = source_url
    in_content = self.getsource(source_url)
    in_soup = BeautifulSoup(in_content, 'html.parser', from_encoding='utf-8')
    soup_content = in_soup.find('section',{'class':'widgets-list-content'})
    info[i]['content'] = soup_content.get_text().strip('\n')
    text_con = in_soup.find('section',{'class':'text'})
    summary = text_con.get_text().strip('\n') if text_con.text != None else NULL
    info[i]['summary'] = summary[0:200]+'...';
    img_list = re.findall('src="(.*?)"',str(soup_content),re.S)
    info[i]['imgs'] = (';').join(img_list)
    info[i]['create_time'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    i+=1
  #print info
  #exit()
  return info
  def saveinfo(self,content_info):
  conn = MySQLdb.Connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='test',charset='utf8')
  cursor = conn.cursor()
  for each in content_info:
    for k,v in each.items():
    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'])
    cursor.execute(sql)
  conn.commit()
  cursor.close()
  conn.close()
if __name__ == '__main__':
  classinfo = []
  p_num = 5
  url = 'http://www.whowhatwear.com/section/fashion-trends/page/1'
  jikesplider = Splider()
  all_links = jikesplider.changepage(url,p_num)
  for link in all_links:
  print u'正在处理页面:' + link
  html = jikesplider.getsource(link)
  info = jikesplider.getcontent(html)
  classinfo.append(info)
  jikesplider.saveinfo(classinfo)

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python操作MongoDB基础知识
Nov 01 Python
python将ip地址转换成整数的方法
Mar 17 Python
python 实现红包随机生成算法的简单实例
Jan 04 Python
使用Flask集成bootstrap的方法
Jul 24 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
Python eval函数介绍及用法
Nov 09 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 Python
python3操作mysql数据库的方法
Jun 23 #Python
Python 中pandas.read_excel详细介绍
Jun 23 #Python
python3.4用函数操作mysql5.7数据库
Jun 23 #Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 #Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 #Python
Python数据操作方法封装类实例
Jun 23 #Python
Python守护线程用法实例
Jun 23 #Python
You might like
PHP 引用是个坏习惯
2010/03/12 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
PHP分享图片的生成方法
2018/04/25 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
pandas object格式转float64格式的方法
2018/04/10 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
python如何处理程序无法打开
2020/06/16 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
英国综合网上购物商城:The Hut
2018/07/03 全球购物
介绍Java的内部类
2012/10/27 面试题
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
医学检验专业大学生求职信
2013/11/18 职场文书
给领导的致歉信范文
2014/01/13 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
高中生班主任评语
2014/04/25 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
歼十出击观后感
2015/06/11 职场文书
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers