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中内置的NotImplemented类型的用法
Mar 31 Python
Python实现字典的key和values的交换
Aug 04 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python过滤列表用法实例分析
Apr 29 Python
详解Python文本操作相关模块
Jun 22 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
Python Django路径配置实现过程解析
Nov 05 Python
python 实现一个简单的线性回归案例
Dec 17 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面向对象编程快速入门
2006/12/14 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
Python 函数基础知识汇总
2018/03/09 Python
Windows下安装Scrapy
2018/10/17 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python应用文件读取与登录注册功能
2019/09/23 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
房地产财务管理制度
2014/02/02 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
终止劳动合同通知书
2015/04/16 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
幼儿园开学通知
2015/04/24 职场文书
python实现简单聊天功能
2021/07/07 Python
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
Python加密与解密模块hashlib与hmac
2022/06/05 Python