Python菜鸟爬虫技巧
python菜鸟爬虫技巧
环境配置安装
- 首先去官网python.org下载好python。
下载完毕后win+R,输入cmd命令,在终端下输入python -V出现如下信息表示安装成功。
- 输入命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
安装清华园request包。
安装成功后,把request换成lxml 安装lxml包。
同时PC环境变量中PATH路径添加好相关环境变量(两个,包括python和python script)
代码编写
- 进入PyCharm编辑器,编写代码。进入浏览器,选择你想要爬取的网页,打开开发者工具,选择
网络(Network) —> 请求标头(Request Headers) —>User-Agent
- 把相关信息在PyCharm中输入,可以在控制台获得你想要的信息。
代码:
import requests
url='https://www.bilibili.com/'
#应对反爬措施:添加请求头
header = {#浏览器的标识'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
response=requests.get(url,headers = header)
#response.status_code 状态码(控制台显示200代表连接成功,404页面找不到)
print(response.status_code)
print(response.text)
B站的加密措施很好,这样简陋的代码只能获取如下信息:
- 网页源代码是字符串,且很多很杂无法提取数据,导入lxml包调用lxml方法可以把它转换成对象(对象有属性有方法)用方法提取。
#提取想要数据需要使用lxml ,直接引用lxml模块下的etree
from lxml import etree
obj = etree.HTML(response.text)
print(obj)
可以看到控制台输出了如下信息:
得到的该对象说明网页元素存储在计算机这块地址中。接下来开发者工具选择Elements选项,这里有很多HTML语言,我们把鼠标悬停在上面层次的搜索(一般head跳过在body找),获取我们想要的板块内容。在里面一层一层的寻找div,最后print求一下最后一层div的长度,检查是否层次书写正确。控制台返回len得到的值为12。
#用xpath解析器解析网页元素
item=obj.xpath('.//body/div[2]/div[1]/div[2]/div[1]/div[2]/div')
print(len(item))
控制台输出了12:
而开发者工具显示该层次中div的数量的确是12个,说明书写正确。
另外,我们可以引用标签的id进行更简便的搜查,而不是死板的从最外层开始逐个书写目录,这样费时又费力。代码如下:
item1=obj.xpath('.//div[@id="reportFirst1"]/div[2]/div')
print(len(item1))
控制台一样可以返回正确的len长度:
4. 接下来就是爬取这一层div中我们需要的标题和播放量信息了。鼠标悬停在当前层的div中我们可以看到信息区域被标记出来。
左上角细节:div 的class名称被标记出来(下图)
接下来继续层次的向里面查找,直到看见这一栏信息:
宏观大图:
在最内层div中,有两个p标签分别记录了我们想要的信息。接下来在代码中实现:
print("阿B主页标题和播放")
for i in item:try:c=i.xpath('./div[1]/a/div/p[@class="title"]')[0].textprint(c)except:passtry:d=i.xpath('./div[1]/a/div/p[@class="play"]')[0].textprint(d)except:passprint("-----------------")
运行如下:
代码中抓取和捕获异常是必要的,因为并不是所有的信息都用p标签封装起来。这也是补充代码的健壮性。
控制台后面多输出了两条重复横线就是因为某些异常捕获后跳过了,可能是某些标签不是p标签因此抓取失败导致的。
完整源码:
import requests
import lxml
url='https://www.bilibili.com/'
#应对反爬措施:添加请求头
header = {#浏览器的标识'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
response=requests.get(url,headers = header)
#response.status_code 状态码(控制台显示200代表连接成功,404页面找不到)
print(response.status_code)
print(response.text)#提取想要数据 lxml ,直接引用lxml模块下的etree
#网页源代码是字符串,很多很杂无法提取数据,可以把它转换成对象(对象有属性有方法)用方法提取
from lxml import etree
obj = etree.HTML(response.text)
print(obj)#用xpath解析器解析网页元素
item=obj.xpath('.//body/div[2]/div[1]/div[2]/div[1]/div[2]/div')
print(len(item))item1=obj.xpath('.//div[@id="reportFirst1"]/div[2]/div')
print(len(item1))print("阿B主页标题和播放")
for i in item:try:c=i.xpath('./div[1]/a/div/p[@class="title"]')[0].textprint(c)except:passtry:d=i.xpath('./div[1]/a/div/p[@class="play"]')[0].textprint(d)except:passprint("-----------------")
——Seina—2020/7/8
Python菜鸟爬虫技巧相关推荐
- Python快速爬虫技巧
参与文末每日话题讨论,赠送异步新书 异步图书君 而在本文中,我们将看到更多特殊的例子,以便让你更加熟悉Scrapy的两个最重要的类--Request和Response. 1.1 需要登录的爬虫 通常 ...
- python入门爬虫知识点
Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 当我们在浏览器中输入一个url后回车,后台会发生什么? 简单来说这段过程发生了以下四个步骤: 网络爬虫要做的,简单来说,就是实现浏览器的功 ...
- 如何用Python网络爬虫爬取网易云音乐歌曲
今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...
- Python爬虫技巧一之设置ADSL拨号服务器代理
Python爬虫技巧一之设置ADSL拨号服务器代理 https://zhuanlan.zhihu.com/p/25286144
- Python 3.x爬虫技巧总结
最近想下载一些陌声人广播,在回家的火车上听,但是链接太多,如果要一个个去点就太浪费时间了,所以就想写一个爬虫自动下载. 用python爬虫抓站的一些技巧总结这篇文章对python爬虫技巧总结得很好,但 ...
- python爬虫难点_Python爬虫技巧
在本文中,我们将分析几个真实网站,来看看我们在<用Python写网络爬虫(第2版)>中学过的这些技巧是如何应用的.首先我们使用Google演示一个真实的搜索表单,然后是依赖JavaScr ...
- 最全知乎专栏合集:爬取11088个知乎专栏,打破发现壁垒(编程、python、爬虫、数据分析..)
最近逛博客,看到一篇很好的文章,整合了知乎上所有优秀的编程.算法专栏,对学习的帮助非常大,转载过来分享给大家: 众所周知,知乎官方没有搜素专栏的功能,于是我通过爬取几十万用户个人主页所关注的专栏从而获 ...
- 最全知乎专栏合集:编程、python、爬虫、数据分析、挖掘、ML、NLP、DL...
上一篇文章<爬取11088个知乎专栏,打破发现壁垒>里提到,知乎官方没有搜素专栏的功能,于是我通过爬取几十万用户个人主页所关注的专栏从而获取到11088个知乎专栏. 本回筛选出其中涉及:编 ...
- 一个比requests还好用的Python高效爬虫库,效率提高一倍!
原文地址:https://juejin.cn/post/7099280151648665613 大家好!我是菜鸟哥 最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用" ...
最新文章
- 冒险岛公益服发布网_溧阳单面布来款定制,儿童冲锋衣厂家-大圣服装批发定制网...
- GitHub 基本常用知识解答2
- 深入浅出MFC文档/视图架构之文档模板
- SQL Server常用的系统存储过程应用实例(转)
- Java:前程似锦的 NIO 2.0
- 【渝粤教育】电大中专新媒体营销实务 (14)作业 题库
- delphi7 调webservice时报错:fault occurred while processing
- python群发邮件 不进垃圾箱_邮件群发如何不进垃圾箱
- 线程的stop方法和interrupt方法
- 新手程序员基础都掌握了,动手敲代码就一脸懵逼?教你解决办法!
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
- Paper reading (六十五):Kernel-penalized regression for analysis of microbiome data
- jupyter 更改默认的文件保存路径
- js html 乱码
- Linux Centos7:11.给系统增加一块硬盘
- meizz (梅花雨)的一些珍藏代码奉献
- Linux中SELINUX状态的巨大影响
- Cyclone V SoC FPGA学习之路第二章:硬件篇
- omnipeek安装与抓包
- phpmyadmin批量导出导入的方法步骤