在这个数据为王的时代,掌握一手好的模型炼丹技巧还远远不够,有时候就是那么一小撮数据,就会对模型性能产生至关重要的影响。虽说大一点的公司一般都有专门负责爬虫的同学,但求人不如求己,每一位炼丹师都应该掌握一些基本的爬虫知识。本篇文章就和大家聊一聊如何通过爬虫,获得自己想要的数据。
今天先来讲讲相对简单的静态页面爬取,不同于动态页面,静态页面是存在于服务器(访问时没有查数据库的过程),不含程序,不可交互。简单来说,我们想要爬取的内容都可从网页源码直接解析得到。在爬取这类网页时,一般分为三步:

  1. 模拟浏览器的真实请求,构造请求消息
  2. 发送人为构造的请求消息,获取网站响应的网页源代码
  3. 对网站源代码进行解析、清洗,找到自己想要的数据并加以保存

对应上面的3步,每一步都有很多可直接使用的Python库。这里我们使用requests库构造请求消息并从网站获取源码,使用BeautifulSoup解析网页源码,使用xlwt将清洗后的数据保存为.xls格式的文件输出。下面举个栗子:
以爬取网站融360为例,该网站的资讯新闻均为静态页面,且亲测几乎没有任何反爬机制,非常适合拿来练手。网站的资讯文章列表如下:

该网站共有44713条资讯文章,共计4472页,通过点击下一页查看URL的变化,发现页码刚好与URL中的最后一位数字对应。
下面直接上代码

import requests
from bs4 import BeautifulSoup
import xlwt
import time
​
def spider(page):url = 'https://www.rong360.com/gl/daikuangonglue/list_1_{0}.html'.format(str(page))headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36'}response = requests.get(url, headers=headers).contentsoup = BeautifulSoup(response, 'lxml')list = soup.find_all('h3')global numfor item in list:data_url = 'https://www.rong360.com' + item.a['href']data = requests.get(data_url, headers=headers).contentdata_soup = BeautifulSoup(data, 'lxml')try:tmp = data_soup.find_all('div', class_='act-content')[0]title = tmp.h1.textsentence = tmp.find_all('p')result = []for s in sentence:result.extend(s.text.strip().replace('\n', ''))context = ''.join(result)num += 1print("第{0}篇文章已爬取完成".format(num))sheet.write(num, 0, title)sheet.write(num, 1, context)except:pass
​
if __name__ == '__main__':book = xlwt.Workbook(encoding='utf-8')sheet = book.add_sheet('金融新闻数据')sheet.write(0, 0, '文章标题')sheet.write(0, 1, '文章内容')num = 0for i in range(1, 4472):spider(i)time.sleep(3)print("共爬取{0}篇文章".format(num))book.save(u"rong360爬虫结果.xls")

分析上面的代码,首先借助User-Agent将我们的请求消息伪装成浏览器,然后requests.get()获取每一页的源码,并对其进行解析。

  url = 'https://www.rong360.com/gl/daikuangonglue/list_1_{0}.html'.format(str(page))headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36'}response = requests.get(url, headers=headers).contentsoup = BeautifulSoup(response, 'lxml')list = soup.find_all('h3')

我们把soup 打印出来如下,发现每一个页码面其实只展现了每篇文章的标题以及部分摘要,真正的文章链接存储于标签的"href"中,如下所示:

<h3><a class="title" href="/gl/2019/12/18/181204.html"><b>小心了!这些人申请房贷,会被银行拒绝!</b></a></h3>
<span>2020/10/28</span>
<p> 买房申请贷款,有些人能够顺利批贷,而有些人却因为某些不可抗拒的原因被银行拒贷,梦想很丰满,但现实却很骨感,这些原因成为他们 买房贷款 路上...</p>
</li><li>
<h3><a class="title" href="/gl/2019/12/31/181321.html"><b>重磅!超20万亿存量房贷迎重大调整 对老用户影响几何?</b></a></h3>
<span>2020/10/28</span>
<p> 2019年最后一个周末,存量浮动利率贷款定价转换方案正式出台,是央行继8月LPR新机制改革后的又一重大举措。银行前期准备工作繁杂 但来年整体收益下...</p>
</li><li>
<h3><a class="title" href="/gl/2020/10/20/182627.html"><b>全国房贷利率终止“九连降”,拐点已现?</b></a></h3>

借助soup.find_all(‘h3’)我们找到所有h3,对结果进行遍历进而找到每篇文章的真实URL,注意得到的URL是相对路径,将其转换成绝对路径后重新请求并解析返回结果。

for item in list:data_url = 'https://www.rong360.com' + item.a['href']data = requests.get(data_url, headers=headers).contentdata_soup = BeautifulSoup(data, 'lxml')

我们把每篇文章的响应结果data_soup 打印出来看,终于在

中找到了文章内容,如下
<div class="act-content">
<h1>小心了!这些人申请房贷,会被银行拒绝!</h1>
<div class="act-info">
<span>时间:2019-12-18 来源:融360作者:融360</span>
</div>
<div>
<p>买房申请贷款,有些人能够顺利批贷,而有些人却因为某些不可抗拒的原因被银行拒贷,梦想很丰满,但现实却很骨感,这些原因成为他们<a href="http://www.rong360.com/fd/" target="_blank"></a><a href="http://www.rong360.com/fd/" target="_blank"></a><a href="http://www.rong360.com/fd/" target="_blank">买房贷款</a>路上的“硬伤”,想补救都难,到底什么样的理由让人连房奴都做不成呢?</p>
<p>
<strong>1、征信不良</strong></p>
<p>个人征信是银行考量借款人申贷条件的重要标准之一,信用不好的借款人很容易被银行拒贷,这里说的信用不良,主要包括信用卡逾期、贷款逾期,为他人做担保,对方贷款逾期不还等都会给申请人形成信用污点,即使是换几家银行咨询也是无济于事。</p>
<p>

接下来就是对文章标题以及主体内容进行解析,并利用xlwt库对每篇文章进行保存,代码如下:

try:tmp = data_soup.find_all('div', class_='act-content')[0]title = tmp.h1.textsentence = tmp.find_all('p')result = []for s in sentence:result.extend(s.text.strip().replace('\n', ''))context = ''.join(result)num += 1print("第{0}篇文章已爬取完成".format(num))sheet.write(num, 0, title)sheet.write(num, 1, context)
except:pass

至此大功告成,我们看一下最终结果:

此次共爬取44578篇文章,耗时大约7小时。另外,大家如果嫌速度慢可以自己写一个多线程模块,加快爬取,对于涉及的BeautifulSoup用法文中没有赘述,感兴趣的同学可以查阅官方文档,里面介绍的非常详细,完整代码及爬取到的数据我也放在github上了,连接: https://github.com/NLPliands/spider-examples

本文同步于微信公众号“NLP炼丹师”,感兴趣的同学可扫码关注,获取更多内容。

爬虫快速入门(一):静态页面爬取相关推荐

  1. beautifulsoup网页爬虫解析_Python爬虫快速入门,静态网页爬取

    在开始之前,请确保你的电脑上已经安装好了BeautifulSoup库,可以通过在命令行中输入pip install beautifulsoup4来进行安装. 一.数据解析 在爬取之前,我们需要检测下响 ...

  2. Python爬虫快速入门,静态网页爬取!

    在开始之前,请确保你的电脑上已经安装好了BeautifulSoup库,可以通过在命令行中输入pip install beautifulsoup4来进行安装. 一.数据解析 在爬取之前,我们需要检测下响 ...

  3. python爬虫实践——零基础快速入门(四)爬取小猪租房信息

    上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...

  4. python爬虫慕课网利用xpath_python爬虫实践——零基础快速入门(二)爬取豆瓣电影...

    爬虫又称为网页蜘蛛,是一种程序或脚本. 但重点在于,它能够按照一定的规则,自动获取网页信息. 爬虫的基本原理--通用框架 1.挑选种子URL: 2.讲这些URL放入带抓取的URL列队: 3.取出带抓取 ...

  5. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

  6. 利用python爬取豆瓣音乐_Python爬虫小白入门(七)爬取豆瓣音乐top250

    抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比python自 ...

  7. 爬虫新手入门实战项目(爬取笔趣阁小说并下载)

    网络爬虫是什么?简单来说就是一个脚本,他能帮助我们自动采集我们需要的资源. 爬虫步骤 获取数据 # 导入模块 import requests import re url = 'https://www. ...

  8. node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)

    之前第一篇爬虫教程node.js爬虫入门(一)爬取静态页面讲解了静态网页的爬取,十分简单,但是遇到一些动态网页(ajax)的话,直接用之前的方法发送请求就无法获得我们想要的数据.这时就需要通过爬取动态 ...

  9. 基于python爬虫————静态页面和动态页面爬取

    基于python爬虫----静态页面和动态页面爬取 文章目录 基于python爬虫----静态页面和动态页面爬取 1. 爬虫的原理 2. 用正则表达式匹配获取数据 3. 页面源码解析 4. 通过req ...

最新文章

  1. 中国已经过了做手机操作系统的窗口期
  2. 面向对象编程基础 (一)
  3. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案,arduino通知提醒方案...
  4. Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意
  5. Shell中 2/dev/null
  6. mysql count group by_MySQL中使用count与group by 的统计问题
  7. 怎么搭建三合一源码优惠券网站步骤教程
  8. Python输出页面源代码
  9. 如何从官网直接下载iTunes?
  10. Android EditText优先弹出数字输入法
  11. mysql constraint primary key_SQL PRIMARY KEY 约束
  12. 发票管理系统java_企业发票管理系统.doc
  13. python列表sort倒序输出_Python 列表sort()添加key和reverse参数操作方法|python基础教程|python入门|python教程...
  14. 指向结构体的指针和指向结构体指针的指针
  15. 【开源】港中文多媒体实验室开源目标跟踪工具箱MMTracking
  16. python爬取pubmed的文献_使用python來調用pubmed API快速整理文獻
  17. 武侠玄幻之无极剑仙(一)
  18. 无线网卡Intel Corporation Wireless 8265 / 8275在ubuntu系统不能工作
  19. 可以接收100多亿光年以外的信号,中国天眼怎么做到的?
  20. DELL5060安装win几个版本系统记录

热门文章

  1. iPhone Android主题,iPhone终于可以换主题了!还能一键体验安卓系统,无需任何插件...
  2. 基于SSM实现高校后勤报修系统
  3. echarts教程(三): 配置多条折线图
  4. 2019-11-29-git-需要知道的1000个问题
  5. python学习之路:期权定价与python实现
  6. HCIP第十七天笔记
  7. 《程序员的自我修养》后感【1】下
  8. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第十集
  9. 下载安装VMware Workstation Pro
  10. 基于Hive的搜狗搜索日志与结果Python可视化设计