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编程中字符串和列表的基本知识讲解
Oct 14 Python
python下10个简单实例代码
Nov 15 Python
使用python编写监听端
Apr 12 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
对python 中class与变量的使用方法详解
Jun 26 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
Django中自定义查询对象的具体使用
Oct 13 Python
Python实现微信表情包炸群功能
Jan 28 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python学习之包与模块详解
Mar 19 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制作文本式留言板
2015/03/18 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[02:27]刀塔重生降临
2015/10/14 DOTA
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python基础教程之字典操作详解
2014/03/25 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python日志记录模块实例及改进
2017/02/12 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python批量解压zip文件的方法
2019/08/20 Python
python读取xml文件方法解析
2020/08/04 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
给分销商的致歉信
2014/01/14 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
公司员工安全协议书
2014/11/21 职场文书
五年级语文教学反思
2016/03/03 职场文书
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS