爬虫训练:第一次真好~

今天把这两天抽空简单尝试的爬虫训练做了一下总结,练习的参考书为《从零开始学python网络爬虫》,作者罗攀,蒋仟。本文主要针对书中讲解操作,本人操作过程中,在最新情况下遇到的问题,以及自己的解决方法和未解决问题记录。

(顺便提一句题外话,今天也是清明节,自己能坐在电脑前敲出这段话,要感谢付出的勇士们,感谢他们的伟大,致敬!!!)

一.爬虫三大库:Requests、Lxml、BeautifulSoup

首先安装这三大库,具体操作非常基础,这里不再赘述。

二.User-Agent

个人操作时在这里卡了一会,可能随着chrome版本更新,user-agent位置发生了变化。在目标网页按F12后,找到network,在下列目录中详细查找,这里对于user-agent是否每个网页都固定在同一个目录下不确定,有懂的可以讲讲。

在这里插入图片描述

三、get方法请求头

>import requests #载入包
>headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'} 
>res=requests.get('https://zhidao.baidu.com/') #请求网页
>print(res.text)

这里要注意,复制的user-agent需要加上英文引号’’。

为了改进爬虫效率,避免出现错误还要返回重新来一遍,这里有个推荐方法:

>import requests #载入包
>from bs4 import BeautifulSoup #BeautifulSoup解析器中载入包
>headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
>res=requests.get('https://zhidao.baidu.com/',headers=headers)
>soup=BeautifulSoup(res.text,'html.parser')
>try:
    print(soup.prettify())
>except ConnectionError:
    print('拒绝连接') 

BeautifulSoup为python标准库中的HTML解析器。

四、完整示例

这次尝试爬虫为百度知道里面的内容,最开始尝试了书中示例的小猪旅行,不过现在这类网站应该都采取了防爬措施,所以设定的网页会变成淘宝的内容,导致无法爬取,后来尝试了豆瓣电影,也出现了问题,可以爬取整个页面,但是到了某个确定内容就不行了,目前尚未解决。所以建议新手先找个固定网页的网站,先从简单的爬起。

1.对你要爬的网页建立好基本数据,如下代码块前半段,用BeautifulSoup对网页进行解码,可以print一下检验是否成功,这里可以借鉴前面的避免重复作业代码进行改善。
2.具体爬取内容时,在想要爬的位置点击右键,最下方会出现<检查>,点击后会对应该段对应网页代码处,如下图,点击右键检查后,对应优秀答主排名第一的位置的网页代码块。

在这里插入图片描述

3.select代码获取方式操作如下,复制后直接粘贴在soup.select(),而想要爬取符合该条件的所有内容时,只需要定位对应元素位置处的网页代码块,把后面多余部分删除。

在这里插入图片描述
代码如下:

import requests
from bs4 import BeautifulSoup
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
res=requests.get('https://zhidao.baidu.com/',headers=headers)
soup=BeautifulSoup(res.text,'lxml') #对网页进行解码
#print(res.text)

#该部分为具体爬取内容
authors=soup.select('#body > div.wgt-two-layout > div > div.wgt-two-layout-left > div > div.rank-list > div:nth-child(2)') 
#print(type(authors))
#print(authors)
for author in authors:
    print(author.get_text()) #这里对该段命令进行重复,保证所有符合的元素都被爬取

结果如下:

<class 'bs4.element.Tag'>

ÓÅÐã´ðÖ÷

1
ºìÉ«ÁÔÈËgexin
30w+»Ø´ð

44w+µãÔÞ



2
ȦGo189
6.4w»Ø´ð

2.9wµãÔÞ



3
½ÔÓпÉÄÜ836
5.1w»Ø´ð

2.5wµãÔÞ



4
Á÷ÐÇÓêÖеÄÒ°º×
2.1w»Ø´ð

8494µãÔÞ



5
DavidÎÚÀ­À­
2394»Ø´ð

1061µãÔÞ

五、问题总结

1.动态网页反爬,以及有个别网页能够爬取整个,但是无法对想要的内容专门爬取。
2.user-agent的查找,毕竟网页上自己不够专业,所以属于笨方法慢慢找。
3.结果非常明显是一堆乱码,除了数字可以看出确实爬了对应位置的内容,其他已经看不出想要的汉字内容,初步判断这个错误应该和网页解码有关。

对于这个问题,搜索了一下属于编码问题,也就是网页的采用的编码方式无法直接分析,解决方法很简单,对获取内容进行编码处理,加上下面这段代码就可以了。

res.encoding='GBK'
4.这条给可能看到这篇自学文章的人一个建议,关于BeautifulSoup本文没有介绍太多,按照书里讲的,这个包有四个解码方式,他们的优劣都可以了解一下。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值