网络爬虫的基本工作流程如下:

1.首先选取一部分精心挑选的种子URL。

2.将这些URL放入待抓取URL队列。

3.从待抓取URL队列中读取待抓取队列的URL,解析DNS,并且得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

4.分析已抓取URL队列中的URL,从已下载的网页数据中分析出其他URL,并和已抓取的URL进行比较去重,最后将去重过的URL放入待抓取URL队列,从而进入下一个循环。

  • 下面我们用BS4 解析库来爬取想要的数据
    作用:用来解析网页,提取指定数据的。提供的接口非常简单。使用起来人性化。所以用的比较多,但是bs4只能解析html格式的数据
    首先我们先在小黑窗安装:
pip install bs4

整体使用步骤:
bs4里面有一个类,BeautifulSoup,然后通过这个类将网页html格式字符串生成一个对象,然后通过对象的方法来进行查找指定元素

* (1)将本地html文件转化为对象

soup = BeautifulSoup(open('soup.html', encoding='utf8'), 'lxml')

* lxml :

是一个文件解析库,通过它的解析生成对象,是一个第三方库,需要安装
更上面一样打开小黑窗属于下面代码安装:

 pip install lxml

html.parser :
是python自带的一个文件解析库

* eg:

soup = BeautifulSoup(open(‘soup.html’, encoding=‘utf8’), ‘lxml’)

根据标签名查找

soup.a 只能查找得到第一个符合要求的节点,是一个对象,bs4自己封装类的对象

* 获取属性

  • soup.a.attrs 获取得到所有属性和值,是一个字典
  • soup.a.attrs[‘href’] 获取指定的属性值
  • soup.a[‘href’] 简写形式

* 获取文本

  • soup.a.string
  • soup.a.text
  • soup.a.get_text()

[注]如果标签里面还有标签,那么string获取就是空,而后两个获取的是纯文本内容

find_all方法

返回的是一个列表,列表里面都是节点对象

  • soup.find_all(‘a’) 找到所有a
  • soup.find_all(‘a’, limit=2) 提取符合要求的前两个a
  • soup.find_all([‘a’, ‘li’]) 查找得到所有的a和li
  • soup.find_all(‘a’, class_=‘xxx’)查找得到所有class是xxx的a
  • soup.find_all(‘li’, class_=re.compile(r’^xiao’))

查找所有的class以xiao开头的li标签

select方法

  • id选择器 #dudu
  • 类选择器 .xixi
  • 标签选择器 div a h1

eg :

  • div #dudu .xixi a
空格:代表后面的节点是前面节点的子节点或者子孙节点
  • div > #dudu > a > .xixi

: 代表后面的节点是前面节点的子节点
返回的是一个列表,列表里面都是符合要求的节点对象
普通对象也能调用select方法,查找的是这个对象下面的内容

  • 下面来爬去三国演义小说:

实例1

爬取三国演义小说保存到文件

import urllib.request
from bs4 import BeautifulSoup
import timedef handle_request(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',}request = urllib.request.Request(url,headers=headers)return requestdef parse_content(content,fp):# 生成soup对象soup = BeautifulSoup(content,'lxml')# 查找所有的章节链接和标题内容oa_list = soup.select('.book-mulu > ul > li > a')# print(len(oa_list))# 遍历列表,依次获取每一个链接和内容for oa in oa_list:# 获取链接href = 'http://www.shicimingju.com' + oa['href']# 获取标题title = oa.stringprint('正在下载--%s--......' % title)# 获取章节内容函数text = get_text(href)# 写入文件fp.write(title + '\n' + text)print('结束下载--%s--' % title)time.sleep(2)# 提取得到章节内容
def get_text(href):# 构建请求对象request = handle_request(href)content = urllib.request.urlopen(request).read().decode('utf8')# 生成soup对象soup = BeautifulSoup(content,'lxml')# 查找包含内容的divodiv = soup.find('div',class_='chapter_content')return odiv.textdef main():# 打开文件fp = open('三国演义.txt','w',encoding='utf8')url = 'http://www.shicimingju.com/book/sanguoyanyi.html'# 构建请求对象request = handle_request(url)# 发送请求,得到响应content = urllib.request.urlopen(request).read().decode('utf8')# 解析内容即可parse_content(content,fp)fp.close()if __name__ == '__main__':main()

实例2

爬取51job求职网 保存到数据库

import urllib.request
from bs4 import BeautifulSoup
import time
import pymysql
def headers_request(url):headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
}request=urllib.request.Request(url,headers=headers)return request
# 解析内容
def parse_content(content, db):# 生成soup对象soup = BeautifulSoup(content,'lxml')# 先找包含所有工作的divodivbox = soup.find('div',id='resultList')# 首先找到包含所有工作的divodiv_list = odivbox.find_all('div',class_='el')[1:]# print(len(odiv_list))for odiv in odiv_list:# 职位名称jobname = odiv.select('.t1 > span > a')[0]['title']# 公司名称company = odiv.select('.t2 > a')[0]['title']# 工作地点area = odiv.select('.t3')[0].string# 职位月薪salary = odiv.select('.t4')[0].string# 发布时间publish_time = odiv.select('.t5')[0].string# print(salary, publish_time)# 保存到字典中item = {'职位名称':jobname,'公司名称':company,'工作地点':area,'职位月薪':salary,'发布时间':publish_time}# 保存到文件中# string = str(item) + '\n'# fp.write(string)# 保存到mysql中save_to_mysql(db,item)def save_to_mysql(db,item):# 获取游标cur = db.cursor()# 执行sql语句sql = """insert into work(jobname,company,area,salary,publish_time) values('%s','%s','%s','%s','%s')""" % (item['职位名称'], item['公司名称'], item['工作地点'], item['职位月薪'], item['发布时间'])# print(sql)try:cur.execute(sql)#提交db.commit()except Exception as e:# print(e)#错误回滚db.rollback()def main():# fp = open('work.txt','w',encoding='utf8')# 链接数据库db = pymysql.connect(host="xxxx",user="xxxx",password="xxxxxx",db="xx",port=xxxx,charset='utf8')# 用户输入要搜索工作关键字keyword = input('请输入要搜索的关键字-')# 用户输入要爬取的起始和结束页码start_page = int(input('请输入要爬取的起始页码-'))end_page = int(input('请输入要爬取的结束页码-'))# 要拼接的起始urlurl = 'https://search.51job.com/list/010000,000000,0000,00,9,99,{},2,{}.html'# 写循环,每一页开始挨着爬取for page in range(start_page,end_page + 1):print('正在爬取第%s页......' % page)# 拼接urlurl_page = url.format(keyword,page)# print(url_page)# 构建请求对象request = headers_request(url_page)# 发送请求,得到响应content = urllib.request.urlopen(request).read().decode('gbk')# 解析内容parse_content(content,db)print('结束爬取第%s页' % page)time.sleep(2)# fp.close()db.close()if __name__ == '__main__':main()

轻松利用Python爬虫爬取你想要的数据相关推荐

  1. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...

    [爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...

  2. 利用Python爬虫爬取网页福利图片

    最近几天,学习了爬虫算法,通过参考书籍,写下自己简单爬虫项目: 爬取某福利网站的影片海报图片 环境:anaconda3.5+spyder3.2.6 目录 1.本节目标 2.准备工作 3.抓取分析 4. ...

  3. 利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!

    首先我准备利用mysql来存储我爬取的信息,建一个host表如下: 然后下载pymysql ,利用它与数据库链接,因为在这里我只涉及到写入的操作: Unit_Mtsql 然后就是使用Beautiful ...

  4. 利用python爬虫爬取斗鱼图片(简单详细)

    关于 在一个安静的夜晚,我缓慢的打开了电脑,望着已经睡着的父母,我轻轻的把门关上,看着斗鱼颜值主播的魅力,我不尽感叹,要是每天都可以不需要那么麻烦的去看那该有多好! 于是我想起了最近刚学的爬虫,嘴角露 ...

  5. java爬虫抓取nba_利用Python爬虫爬取NBA数据功能实例分享

    Python实现爬虫爬取NBA数据功能示例 本文实例讲述了Python实现爬虫爬取NBA数据功能.分享给大家供大家参考,具体如下: 爬取的网站为:stat-nba.com,这里爬取的是NBA2016- ...

  6. 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

    项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. ...

  7. python爬网站数据实例-利用Python爬虫爬取NBA数据功能实例分享

    Python实现爬虫爬取NBA数据功能示例 本文实例讲述了Python实现爬虫爬取NBA数据功能.分享给大家供大家参考,具体如下: 爬取的网站为:stat-nba.com,这里爬取的是NBA2016- ...

  8. Python爬虫 爬取酷狗TOP500的数据

    根据书籍<从零开始学Python网络爬虫>P41,综合案例2-爬取酷狗TOP500的数据修改而来. 使用模块requests和模块BeautifukSoup进行爬取. 不得不说,酷狗拿来跑 ...

  9. 简易爬虫-利用Python爬虫爬取圣墟小说到本地

    大家好,今天给大家带来Python爬虫的简易制作,很适合新手练手. 爬虫即是利用程序模仿真实用户浏览网页并记录目标内容,从而可避过网站的广告,以获取较好的阅读体验. 本次以辰东大神的新书<圣墟& ...

最新文章

  1. Java黑皮书课后题第5章:**5.35(加法)编写程序,计算下面的和:1/(1+根2) + 1/(根2+根3) + 1/(根3+根4)+……1/(根624+根625)
  2. 基于Kafka+Flink+Redis的电商大屏实时计算案例
  3. Linux 的 复制命令 【 cp 】 (copy)及其 (常用参数 -fp)
  4. LINQ 学习笔记8
  5. ns.ajax,UIWebView使用NSURLProtocol(拦截),ajax加载失败的问题
  6. 使用weblogic部署若依项目(图文教程)
  7. 倾斜摄影当中模型精度和测绘当中的分辨率/比例尺是怎么回事?
  8. struts2与常用表格ajax操作的json传值问题
  9. ASEMI的MOS管9N90参数,9N90电路图,9N90实物图
  10. 基于Python的课程管理系统【100010023】
  11. 普通商品期货手机开户流程
  12. 浏览器内多个标签页之间的通信方式有哪些?
  13. java实训报告结论_Java实验报告(二)及总结
  14. C++ - pow函数
  15. git基本命令及使用
  16. 探索路上永不止步:区块链驱动广告透明和安全
  17. 华为ENSP之 MPLS V Extranet
  18. unity PC端与手机同步的调试
  19. java根据生日精确计算年龄_java根据出生日期计算年龄(精确到天)
  20. 项目申请PPT经验总结

热门文章

  1. 3.6 青年歌手参加歌曲大奖赛,有10个评委给选手打分,试编程求出该选手的平均得分并输出(去掉一个最高分和最低分)
  2. Python与sql交互入门(mysql和sqlite)
  3. 专业兴趣小组的建设实施方案(讨论稿)
  4. 跟着王进老师学开发C#篇第三季:数据库准备篇-王进-专题视频课程
  5. vue中的插槽(slot)
  6. 【设计模式】——六芒星
  7. pycharm如何对json文件格式化
  8. 一个新的项目:狼人杀(二)
  9. python中def func是什么意思_Python的函数参数详解
  10. 三分钟教会你自制 iconFont 字体图标库