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检测是文件还是目录的方法
Jul 03 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
python中的协程深入理解
Jun 10 Python
Python中的四种交换数值的方法解析
Nov 18 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
python日期与时间戳的各种转换示例
Feb 12 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
为什么是 Python -m
Jun 19 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
pandas统计重复值次数的方法实现
Feb 20 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/11/27 PHP
PHP图片上传代码
2013/11/04 PHP
php链式操作的实现方式分析
2019/08/12 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
javascript闭包的理解和实例
2010/08/12 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
Python实现转换图片背景颜色代码
2020/04/30 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
护士自荐信
2013/10/25 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
道路施工安全责任书
2014/07/24 职场文书
农村门前三包责任书
2014/07/25 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
关于环保的活动方案
2014/08/25 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书