爬虫简介

爬虫,就是对网站发起请求,获取响应(爬取网页数据)的自动化程序 。
可以先打开一个浏览器,百度,搜索 关键字 ,会出现相关的网页,如果想要爬取网页的数据 就需要浏览器 通过F12审查元素 看到网页的html源代码。然后将链接和文字提取出等等需要的隐藏在html的信息。
这里写图片描述

可以看到左边有很多条记录,每一条记录都是请求和响应的过程(当然我们只请求了一次)。

点击一条数据,可以看在headers里面,有general(通用的请求信息,比如request url,method),response/requests headers信息。

这里写图片描述

这里写图片描述

这几个部分就是解析源代码(可以在preview的下部分看到) 呈现出的部分。
这里写图片描述

上面就是响应体中的内容了。
将响应体拿出来(也就是源代码),进行解析就好了。

直接跑代码:

import requests

response = requests.get("http://www.baidu.com")
print("response_status_code is"+str(response.status_code))
print(response.text)

response = requests.get('https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/mantpl/img/base/loading_72b1da62.gif')
print(response.content)
with open('/home/yanguokai/桌面/pachong/1.gif','wb') as f:
    f.write(response.content)
    f.close()

比如此处获取的就是一张图片,那么图片的URL请求地址我们可以这样轻易的获得,获得之后放在我们的request中get里面的url,然后将返回的response的context(二进制形式)写入文件,这样我们就download了一张图片。
这里写图片描述
这里写图片描述

另外如果没有看到添加请求头的话,可以这样构建一个headers字典。
这里写图片描述

import requests



headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3004.3 Safari/537.36'}

response = requests.get('https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/mantpl/img/base/loading_72b1da62.gif',headers)
print(response.status_code)
with open('/home/yanguokai/桌面/pachong/1.gif','wb') as f:
    f.write(response.content)
    f.close()

像这种二进制文件,还有视频。只要是能请求到的,多可以获取

下面就应该来解析数据了。
很多种方法,比如直接解析html,也有很多以json返回的,都可以json解析。(在xhr显示下,结构化的json)

这里写图片描述

第一个返回的是网页源码:可以看到和我们在网页上直接看的不一样。(因为我们get到的都是第一个的源码,而很多都是js( ajax请求 调用后台接口)生成的,会覆盖以前的html)
这里写图片描述
可以看看js渲染过的代码是怎样的,
这里写图片描述

那么我们应该怎么样获取解析通过js渲染后的界面呢?
可以使用我们前面安装的库selenium 直接模拟浏览器访问,获得的源码也是渲染过后的源码,这样我们直接来解析是没有什么问题的。

这里遇到这样的问题,可能可能是没有将浏览器添加到 环境path中?是没有chrome浏览器吗?换个firefox怎么样呢?
这里写图片描述

安装chrome浏览器

sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb

或者安装chromium-browser

sudo apt-get install chromium-browser

这里写图片描述

安装没有遇到问题,继续安装chrome_driver
可以直接下载
这里写图片描述
也可以使用命令

curl http://chromedriver.storage.googleapis.com/2.9/chromedriver_linux64.zip -O

这里写图片描述

解压下载的zip文件,得到一个chromedriver程序,这个就是用来连接chrome 和 webdriver的。

unzip chromedriver_linux64.zip 

这里写图片描述

这时候需要将chromedriver添加到path中,并修改执行权限,因为我们一开始报的错就是所没有在path中找到chrome。(如果是将driver放到chrome所在的文件夹中,到时候在脚本中要申明driver的路径)

sudo mv ./chromedriver /usr/local/bin/
sudo chmod a+x /usr/local/bin/chromedriver 

这里写图片描述

测试配置chromedriver成功,会出现如下的结果。
这里写图片描述

可以跑程序了
这里写图片描述

为什么没有打开正常的页面呢?,里面其实有两个问题,一个是显示的不受支持的命令行标记(可以通过设置chrome的option属性解决。),二个是地址栏只显示data:

options = webdriver.ChromeOptions()

options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"])

browser = webdriver.Chrome(chrome_options=options)

找了好久也只能是这样的情况了(说是两个版本呢不匹配,说是路径问题,估计会是options的配置问题吧,但是没有找到解决的),虽然没有了data,但是不会转到网页去。先放这,下次再解决吧。

options.add_argument("user-data-dir=/tmp/.com.google.Chrome.qtZa3O/Default") 

这里写图片描述

原来是版本不匹配呢(我以为是2.9比2.2要更新些,所以直接下了一个2.9版本的,其实最新的是2.30的(2017)。)就因为这个问题(果然菜不是时间能解决的),呵呵几个小时过去了。
这里写图片描述

这里写图片描述

总结起来爬虫有基本四步,
第一步:发起请求
通过http库像网站 发起request(通常包含额外的head信息,可以模拟浏览器请求)请求。

request中内容:
1.请求方式 :主要有 get, post(其他的不怎么用)
get请求是将所有的参数信息放在请求的url里面。(在url中会被url编码,但是还是同样的)
这里写图片描述
那么像一些重要的参数比如密码之类的就不适合暴露在url中,所以使用post方法需要构造一个表单。
post方法里 有额外的formdata,将请求的信息存放在这个里面。

第二步:获取响应
网站接受到请求之后,通常会反馈响应 response,response的类型可能是html,json,或者是其他的,内容便是页面请求的内容。

第三步:保存数据
将返回的response内容进行保存,同样的保存的格式也不统一,存为文本,存为数据库,保存特定格式。

第四步:解析数据
一般是清理垃圾(没用的),抽取精华(需要的)。通常获取的内容是html(json,二进制),那么就可以用正则表达式,网页解析工具,等进行解析。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值