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使用reportlab画图示例(含中文汉字)
Dec 03 Python
Python functools模块学习总结
May 09 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Python中函数参数调用方式分析
Aug 09 Python
对Python函数设计规范详解
Jul 19 Python
django 连接数据库 sqlite的例子
Aug 14 Python
利用Python复制文件的9种方法总结
Sep 02 Python
python实现智能语音天气预报
Dec 02 Python
python两种注释用法的示例
Oct 09 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
Python 正则模块详情
Nov 02 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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
浅谈js原生拖放
2016/11/21 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python实现购物程序思路及代码
2017/07/24 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
产品发布会策划方案
2014/05/12 职场文书
年终奖发放方案
2014/06/02 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
运动会闭幕词
2015/01/28 职场文书
详解JS ES6编码规范
2021/05/07 Javascript