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调用shell的方法
Nov 20 Python
Tensorflow卷积神经网络实例
May 24 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
python之信息加密题目详解
Jun 26 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
Python新手学习装饰器
Jun 04 Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 Python
Python测试框架:pytest学习笔记
Oct 20 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
pytorch查看网络参数显存占用量等操作
May 12 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
Javascript函数的参数
2015/07/16 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
技术人员面试提纲
2013/11/28 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis