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 相关文章推荐
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
Python简单生成随机数的方法示例
Mar 31 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
Tesserocr库的正确安装方式
Oct 19 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
Django Rest framework频率原理与限制
Jul 26 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 Python
python新手学习使用库
Jun 11 Python
Python预测2020高考分数和录取情况
Jul 08 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 Python
Python echarts实现数据可视化实例详解
Mar 03 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/10/09 PHP
请离开include_once和require_once
2013/07/18 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
IE8 原生JSON支持
2009/04/13 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
13个PHP函数超实用
2015/10/21 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
在python中实现对list求和及求积
2018/11/14 Python
python 字典访问的三种方法小结
2019/12/05 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
2021/02/07 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
大学毕业感言50字
2014/02/07 职场文书
小学英语课后反思
2014/04/26 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
个人廉政承诺书
2015/04/28 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript