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中time()方法的使用的教程
May 22 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
python如何实现异步调用函数执行
Jul 08 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
通过自学python能找到工作吗
Jun 21 Python
编写python代码实现简单抽奖器
Oct 20 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP5 字符串处理函数大全
2010/03/23 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
Flask框架单例模式实现方法详解
2019/07/31 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
单位实习证明怎么写
2014/01/17 职场文书
师说教学反思
2014/02/07 职场文书
统计系教授推荐信
2014/02/28 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
《开国大典》教学反思
2014/04/19 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
pytorch中[..., 0]的用法说明
2021/05/20 Python
MySQL普通表如何转换成分区表
2022/05/30 MySQL