我的编程空间,编程开发者的网络收藏夹
学习永远不晚

用Python写一个小爬虫吧!

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

用Python写一个小爬虫吧!

学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习。

我在此之前接触过Python,也写过一些小脚本,于是决定用Python来完成这个小项目。

首先说说一个爬虫的组成部分:

1.目标连接,就是我需要爬取信息的网页的链接;

2.目标信息,就是网页上我需要抓取的信息;

3.信息梳理,就是对爬取的信息进行整理。

下面我来说说整个爬虫的设计思路:

总体思路:以“前端”关键字进行搜索,把搜索结果上面每一个招聘信息的链接爬取下来,再通过这些招聘职位的链接去抓取相应页面上的具体要求。

1.先在51job上以“前端”为关键字进行搜索,从搜索结果来看,跟我的目标职位相似度还是很高的,所以用“前端”作为关键字是没问题的。

2.获取搜索结果的链接,通过比较1,2两页的链接,发现只有一个数字的差别,所以我可以直接更改这个数字来获取每一页的链接

3.在搜索结果页面按F12可以看到网页结构,按下左上角的鼠标按钮,再去点网页上的元素,网页结构会自动展现相应的标签

 

 

4.按下左上角的鼠标按钮,再去点招聘信息的岗位链接,可以在网页结构中看到,我们需要的每一个岗位的具体链接是放在一个a标签里面的

5.再点进这个职位的详情页面,按F12查看网页结构,再按左上角鼠标按钮,之后点击网页上的职位信息,我发现职位信息都是放在一个div标签里面,这个div有一个样式类属性class="bmsg job_msg inbox",具体的信息是放在这个div下的p标签中,我查看了其他几个招聘页面,也是相同的结构

 

所以我的爬虫要先爬取搜索结果页面中的职位链接,再进到相应的链接爬取div标签下p标签的内容,最后对这些内容做一个词频分析。

 

为了简化这个小项目的结构,我决定把这3个任务分成3个小脚本来执行。

首先是爬取搜索结果页面中的职位链接。代码如下

 1 #爬取职位链接这一步用到了3个库
 2 import requests
 3 from bs4 import BeautifulSoup
 4 import chardet
 5 
 6 f = open('info.txt', 'a') # f是我存储爬取信息的文本文件,使用追加模式,就是说后面写入的信息会放在已有的信息后面,这样就不会把之前的信息覆盖掉
 7 url = 'https://search.51job.com/list/020000,000000,0000,00,9,99,%25E5%2589%258D%25E7%25AB%25AF,2,{}.html?' \
 8       'lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&' \
 9       'lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=4&dibiaoid=0&address=&line=&' \
10       'specialarea=00&from=&welfare=#top' # url里面关乎页面跳转的数字我用{}占位,后面可以通过format函数动态替换
11 header = {
12     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 '
13                   'Safari/537.36',
14     'Connection': 'keep-alive',
15     }# header是为了把爬虫伪装的像是正常的访问。
16 
17 #for循环结构,循环10次,也就是说爬取10页上面的职位链接
18 for i in range(11):
19   # 用requests库的get方法与服务器进行链接,返回一个requests.models.Response的类
20     pageConnect = requests.get(url.format(i), headers=header)
21   #用chardet库的detect方法获取网页编码格式,返回的是dict字典,具体的编码格式在encoding这个键对应的值中
22     pageConnect.encoding = chardet.detect(pageConnect.content)['encoding']
23   #设置好编码格式后,用text方法把Response这个类转化为字符串供beautifulSoup处理
24     page = pageConnect.text
25   #使用BeautifulSoup函数把page字符串转化为一个BeautifulSoup对象,lxml是解析器的类型
26     soup = BeautifulSoup(page, 'lxml')
27   #使用BeautifulSoup对象的select方法,可以用css选择器把存放有职位链接的a标签选出来
28   #每一个a标签都是放在class=el的div标签下class=t1的p标签下
29     aLabel = soup.select('div.el > p.t1 a')
30   #每一个搜索结果页有50个职位,也就有50个a标签,通过for循环,获取每个a标签的title属性,href属性
31   #title属性存放了职位名称,我可以通过职位名称把不是我需要的职位链接筛选出去
32   #href属性存放了每一个职位的链接
33     for each in aLabel:
34       #把这些信息存放到f也就是info.txt这个文本中
35         print(each['title'], each['href'], file=f)

 

接着要做的就是爬取每一个链接页面上的职位要求了

代码如下

 1  import requests
 2  from bs4 import BeautifulSoup
 3  import chardet
 4 
 5  #打开我存放链接的文本,使用readlines方法读取文本内容,返回的是一个list列表,每一行为列表中的一项
 6  with open('info.txt') as info:
 7      link = info.readlines()
 8  #打开一个文本文件,存放抓取到的职位要求,编码格式设为utf-8
 9  job = open('job.txt', 'a', encoding='UTF-8')
10  header = {
11      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 '
12                    'Safari/537.36',
13      'Connection': 'keep-alive',
14      }
15  
16  for each in link:
17    #info.txt中存放的信息是职位名 + 链接:Web前端开发工程师 https://*****  
18    #所以先对列表中的每一项,也就是说一个字符串调用find方法,搜索关键字http,返回的是一个整数,表示的是字符串中http开头h的索引值
19      index = each.find('http')
20    #利用这个索引值,可以获取字符串中链接的部分
21      url = each[index:]
22      pageConnect = requests.get(url, headers=header)
23      pageConnect.encoding = chardet.detect(pageConnect.content)['encoding']
24      page = pageConnect.text
25      soup = BeautifulSoup(page, 'lxml')
26    #所有的职位要求是放在一个div中,它的样式类为class=bmsg job_msg inbox,div中的p标签包含具体的信息,返回的是一个list列表
27      div = soup.select('div.bmsg.job_msg.inbox p')
28    #经过测试发现,最后2个p标签存放着关键字,所以去掉
29      jobInfo = div[:-2]
30      for eachInfo in jobInfo:
31      #每个列表项存放着如<p>***</P>的bs4.element.Tag,要获取其中文字部分,要使用.string方法
32        print(eachInfo.string, file=job)

 

最后job.txt中存放着我抓取到的所有职位要求,但是我不可能一条一条的去看,所以借助jieba这个库进行分词

1 import jieba
2 
3 with open('job.txt', encoding='utf-8') as job:
4     info = job.readlines()
5 for eachLine in info:
6     for eachWord in jieba.cut(eachLine):
7         print(eachWord)

 

为了节省时间,分词结果直接打印出来,然后复制到excel表中,使用数据透视表统计一下,最后整理结果如下

这是一个非常简陋的小项目,不过它也实现了我的目标。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

用Python写一个小爬虫吧!

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

用Python写一个小爬虫吧!

学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习。我在此之前接触过Python,也写过一些小脚本,于是决定用Python来完成这个小项目
2023-01-30

怎么用Python写个听小说的爬虫

这篇文章主要介绍了怎么用Python写个听小说的爬虫的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python写个听小说的爬虫文章都会有所收获,下面我们一起来看看吧。书名和章节列表随机点开一本书,这个页面
2023-06-29

Python的爬虫框架scrapy用21行代码写一个爬虫

开发说明 开发环境:Pycharm 2017.1(目前最新)开发框架:Scrapy 1.3.3(目前最新) 目标爬取线报网站,并把内容保存到items.json里 页面分析根据上图我们可以发现内容都在类为post这个div里下面放出post
2022-06-04

利用node.js写一个爬取知乎妹纸图的小爬虫

前言 说起写node爬虫的原因,真是羞羞呀。一天,和往常一样,晚上吃过饭便刷起知乎来,首页便是推荐的你见过最漂亮的女生长什么样?,点进去各种漂亮的妹纸爆照啊!!!,看的我好想把这些好看的妹纸照片都存下来啊!一张张点击保存,就在第18张得时候
2022-06-04

python 写的一个爬虫程序源码

写爬虫是一项复杂、枯噪、反复的工作,考虑的问题包括采集效率、链路异常处理、数据质量(与站点编码规范关系很大)等。整理自己写一个爬虫程序,单台服务器可以启用1~8个实例同时采集,然后将数据入库。#-*- coding:utf-8 -*- #!
2022-06-04

还在一个个写规则?来了解下爬虫的智能化解析吧!

阅读本文大概需要 10 分钟。爬虫是做什么的?是帮助我们来快速获取有效信息的。然而做过爬虫的人都知道,解析是个麻烦事。比如一篇新闻吧,链接是这个:https://news.ifeng.com/c/7kQcQG2peWU,页面预览图如下:预
2023-06-02

使用python编写简单网络爬虫(一)

总算有时间动手用所学的python知识编写一个简单的网络爬虫了,这个例子主要实现用python爬虫从百度图库中下载美女的图片,并保存在本地,闲话少说,直接贴出相应的代码如下:---------------------------------
2023-01-31

使用Nodejs怎么编写一个定时爬虫

使用Nodejs怎么编写一个定时爬虫?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。const axios = require(axios)const roomid = "1
2023-06-09

一个简单的python爬虫,爬取知乎

一个简单的python爬虫,爬取知乎主要实现 爬取一个收藏夹 里 所有问题答案下的 图片文字信息暂未收录,可自行实现,比图片更简单具体代码里有详细注释,请自行阅读项目源码:# -*- coding:utf-8 -*- from spider
2023-06-02

怎么在python中使用feapde实现一个爬虫

这篇文章给大家介绍怎么在python中使用feapde实现一个爬虫,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的
2023-06-14

小程序开发(一):使用scrapy爬虫

过完年回来,业余时间一直在独立开发一个小程序。主要数据是8000+个视频和10000+篇文章,并且数据会每天自动更新。我会整理下整个开发过程中遇到的问题和一些细节问题,因为内容会比较多,我会分成三到四篇文章来进行,本文是该系列的第一篇文章,
2023-01-31

使用python实现一个简单的图片爬虫

本教程详细介绍使用Python编写图片爬虫的步骤:导入库(requests、BeautifulSoup)获取目标网站的HTML代码解析HTML提取图像URL下载图像处理错误优化建议:并行下载图像使用线程池使用缓存示例脚本可从特定网站爬取特定类型的图像。最佳实践:遵守机器人协议限制爬虫速率避免下载受版权保护的图像获得必要授权
使用python实现一个简单的图片爬虫
2024-04-02

使用C++编写一个DHT爬虫,实现从DHT网络爬取BT种子

以下是一个简单的使用C++编写的DHT爬虫,以从DHT网络中爬取BT种子:```cpp#include #include #include #include #include #include #include #include #incl
2023-10-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录