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使用CMD模块更优雅的运行脚本
May 11 Python
python如何重载模块实例解析
Jan 25 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
使用python脚本实现查询火车票工具
Jul 19 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
Python缓存技术实现过程详解
Sep 25 Python
python实现计算器功能
Oct 31 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
python中JWT用户认证的实现
May 18 Python
python实现邮件循环自动发件功能
Sep 11 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
PHP4中实现动态代理
2006/10/09 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
javascript实现拖拽碰撞检测
2020/03/12 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
python学习笔记之多进程
2020/08/06 Python
公司晚会策划方案
2014/05/17 职场文书
经营目标责任书
2015/05/08 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS