三个python爬虫项目实例代码


Posted in Python onDecember 28, 2019

这篇文章主要介绍了三个python爬虫项目实例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

爬取内涵段子:

#encoding=utf-8
import urllib2

import re


class neihanba():
  def spider(self):
    '''
    爬虫的主调度器
    '''
    isflow=True#判断是否进行下一页
    page=1
    while isflow:
      url="http://www.neihanpa.com/article/list_5_"+str(page)+".html"
      html=self.load(url)
      self.deal(html,page)
      panduan=raw_input("是否继续(y/n)!")
      if panduan=="y":
        isflow=True
        page+=1
      else:
        isflow=False
  def load(self,url):
    '''
    针对url地址进行全部爬去
    :param url: url地址
    :return: 返回爬去的内容
    '''
    header = {
      "User-Agent": " Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"
    }
    request = urllib2.Request(url, headers=header)
    response = urllib2.urlopen(request)
    html = response.read()
    return html
  def deal(self,html,page):
    '''
    对之前爬去的内容进行正则匹配,匹配出标题和正文内容
    :param html:之前爬去的内容
    :param page: 正在爬去的页码
    '''
    parrten=re.compile('<li class="piclist\d+">(.*?)</li>',re.S)
    titleList=parrten.findall(html)
    for title in titleList:
      parrten1=re.compile('<a href="/article/\d+.html" rel="external nofollow" >(.*)</a>')
      ti1=parrten1.findall(title)
      parrten2=re.compile('<div class="f18 mb20">(.*?)</div>',re.S)
      til2=parrten2.findall(title)
      for t in ti1:
        tr=t.replace("<b>","").replace("</b>","")
        self.writeData(tr,page)
      for t in til2:
        tr=t.replace("<p>","").replace("</p>","").replace("<br>","").replace("<br />","").replace("&ldquo","\"").replace("&rdquo","\"")
        self.writeData(tr,page)
  def writeData(self,context,page):
    '''
    将最终爬去的内容写入文件中
    :param context: 匹配好的内容
    :param page: 当前爬去的页码数
    '''
    fileName = "di" + str(page) + "yehtml.txt"
    with open(fileName, "a") as file:
      file.writelines(context + "\n")
if __name__ == '__main__':
  n=neihanba()
  n.spider()

爬取智联:

#encoding=utf-8
import urllib
import urllib2

import re


class zhiLian():
  def spider(self,position,workPlace):
    '''
    爬虫的主调度器
    :param position: 职位
    :param workPlace: 工作地点
    '''
    url="http://sou.zhaopin.com/jobs/searchresult.ashx?"
    url+=urllib.urlencode({"jl":workPlace})
    url+="&"
    url+=urllib.urlencode({"kw":position})
    isflow=True#是否进行下一页的爬去
    page=1
    while isflow:
      url+="&"+str(page)
      html=self.load(url)
      self.deal1(html,page)
      panduan = raw_input("是否继续爬虫下一页(y/n)!")
      if panduan == "y":
        isflow = True
        page += 1
      else:
        isflow = False
  def load(self,url):
    '''
    针对url地址进行全部爬去
    :param url: url地址
    :return: 返回爬去的内容
    '''
    header = {
      "User-Agent": " Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"
    }
    request = urllib2.Request(url, headers=header)
    response = urllib2.urlopen(request)
    html = response.read()
    return html
  def deal1(self,html,page):
    '''

    对之前爬去的内容进行正则匹配,匹配职位所对应的链接
    :param html:之前爬去的内容
    :param page: 正在爬去的页码
    '''
    parrten=re.compile('<a\s+style="font-weight:\s+bold"\s+par="ssidkey=y&ss=\d+&ff=\d+&sg=\w+&so=\d+"\s+href="(.*?)" rel="external nofollow" target="_blank">.*?</a>',re.S)
    til=parrten.findall(html)#爬去链接
    for t in til:
      self.deal2(t,page)
  def deal2(self,t,page):
    '''
    进行二次爬虫,然后在新的页面中对公司、薪资、工作经验进行匹配
    :param t: url地址
    :param page: 当前匹配的页数
    '''
    html=self.load(t)#返回二次爬虫的内容
    parrten1=re.compile('<a\s+onclick=".*?"\s+href=".*?" rel="external nofollow" \s+target="_blank">(.*?)\s+.*?<img\s+class=".*?"\s+src=".*?"\s+border="\d+"\s+vinfo=".*?"></a>',re.S)
    parrten2=re.compile('<li><span>职位月薪:</span><strong>(.*?) <a.*?>.*?</a></strong></li>',re.S)
    parrent3=re.compile('<li><span>工作经验:</span><strong>(.*?)</strong></li>',re.S)
    til1=parrten1.findall(html)
    til2=parrten2.findall(html)
    til3=parrent3.findall(html)
    str=""
    for t in til1:
      t=t.replace('<img title="专属页面" src="//img03.zhaopin.cn/2012/img/jobs/icon.png" border="0" />',"")
      str+=t
      str+="\t"
    for t in til2:
      str+=t
      str += "\t"
    for t in til3:
      str+=t
    self.writeData(str,page)
  def writeData(self,context,page):
    '''
    将最终爬去的内容写入文件中
    :param context: 匹配好的内容
     :param page: 当前爬去的页码数
    '''
    fileName = "di" + str(page) + "yehtml.txt"
    with open(fileName, "a") as file:
      file.writelines(context + "\n")
if __name__ == '__main__':
  position=raw_input("请输入职位:")
  workPlace=raw_input("请输入工作地点:")
  z=zhiLian()
  z.spider(position,workPlace)

爬取贴吧:

#encoding=utf-8
import urllib
import urllib2

import re


class teiba():
  def spider(self,name,startPage,endPage):
    url="http://tieba.baidu.com/f?ie=utf-8&"
    url+=urllib.urlencode({"kw":name})
    for page in range(startPage,endPage+1):
      pn=50*(page-1)
      urlFull=url+"&"+urllib.urlencode({"pn":pn})
      html=self.loadPage(url)
      self.dealPage(html,page)

  def loadPage(self,url):
    header={
      "User-Agent":" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"
    }
    request=urllib2.Request(url,headers=header)
    response=urllib2.urlopen(request)
    html=response.read()
    return html
  def dealPage(self,html,page):
    partten=re.compile(r'<a\s+rel="noreferrer"\s+href="/p/\d+" rel="external nofollow" \s+title=".*?"\s+target="_blank" class="j_th_tit\s+">(.*?)</a>',re.S)
    titleList=partten.findall(html)
    rstr=r'<span\s+class="topic-tag"\s+data-name=".*?">#(.*?)#</span>'
    for title in titleList:
      title=re.sub(rstr,"",title)
      self.writePage(title,page)
  def writePage(self,context,page):
    fileName="di"+str(page)+"yehtml.txt"
    with open(fileName,"a") as file:
      file.writelines(context+"\n")
if __name__ == '__main__':
  name=raw_input("请输入贴吧名:")
  startPage=raw_input("请输入起始页:")
  endPage=raw_input("请输入终止页:")
  t=teiba()
  t.spider(name,int(startPage),int(endPage))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现在目录中查找指定文件的方法
Nov 11 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
Python中的单继承与多继承实例分析
May 10 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
Django中的forms组件实例详解
Nov 08 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
May 14 Python
python scrapy重复执行实现代码详解
Dec 28 #Python
Python统计时间内的并发数代码实例
Dec 28 #Python
如何基于python实现脚本加密
Dec 28 #Python
python使用配置文件过程详解
Dec 28 #Python
python正则表达式匹配IP代码实例
Dec 28 #Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 #Python
python爬虫添加请求头代码实例
Dec 28 #Python
You might like
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
axios学习教程全攻略
2017/03/26 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
给领导的致歉信范文
2014/01/13 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
创先争优活动心得体会
2014/09/04 职场文书
生死抉择观后感
2015/06/09 职场文书
工作收入证明模板
2015/06/12 职场文书
学校少先队工作总结
2015/08/12 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
为Centos安装指定版本的Docker
2022/04/01 Servers