三个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下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
python ansible服务及剧本编写
Dec 29 Python
python中csv文件的若干读写方法小结
Jul 04 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
python psutil监控进程实例
Dec 17 Python
python 从list中随机取值的方法
Nov 16 Python
浅谈Python协程asyncio
Jun 20 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
javascript动态加载三
2012/08/22 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python面向对象实现方法总结
2020/08/12 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
晚会邀请函范文
2014/01/24 职场文书
小学社会实践活动总结
2014/07/03 职场文书
敬老月活动总结
2014/08/28 职场文书
企业法人授权委托书
2014/09/25 职场文书
学术会议通知
2015/04/15 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL