本文旨在科普,用最简单明了的语言引导初学者接触爬虫,不求严谨。看到不懂的或者不想懂的专有名词不要纠结,只要代码没问题就继续下去,等爬取成功了再回头抠细节。 我将以虎扑火箭专区为例,爬取火区前一百页的标题。 最先要说明的是,Python爬虫非常简单!(当然是指入门)
好了,直入主题吧! 导入三个模块 requests 用来发送请求(发送了请求,服务器才会响应你,你的浏览器才有内容显示) import requests 第一步 爬取火箭专区地址:https://bbs.hupu.com/rockets
这个r就是HTTP状态码,我们最常见的404也是状态码 print(r.text) 爬取页面就搞定了,不过出来的都是源码,我们要筛选出想要的信息 第二步 解析要解析页面,必须先要了解一下页面的结构,我们先去火箭专区,然后右键第一个标题,检查(以chrome浏览器为例,360浏览器好像是审查元素) Elements面板下展示的内容,就是网页的DOM节点和CSS样式,简单说就是网页的结构和内容,按小三角可以折叠和展开,鼠标放在代码上面,左边会高亮对应的内容,双击代码可以直接编辑。 ... class='for-list' 这样带等号的叫做属性,有点像python的字典,等号左边是属性名,右边是属性值class属性是非常常用的属性,也叫做类名 经过观察,我们会发现每个帖子信息都在li标签里面 下面简单粗暴地说下pyquery的语法(细讲的话要另起一文了) 标签直接写,
成功了! 要有网址才能爬取,所以我们先要解决网址的问题,常规思路是提取网站下一页的链接,但是虎扑的下一页其实是javascript渲染的。而我们用requests直接发送get请求得到的是未经渲染的原始信息。js渲染这种高级的东西我们目前无法解决,但我们通过点击下一页网址可以发现
似乎横杠后面的数字就是页数 def get_title(n): 然后在1-10遍历一下
十页标题就哗哗哗地爬出来了 但我们的目标是要爬100页的 *for i in range(11): 事实证明是不行的,出来的还是前十页的标题,那问题出在哪呢? 所以我们就要涉及到一个爬虫的基础知识了:headers(头部信息)
一般来说,构建headers的时候,user-agent是必要的,相当于你的身份信息,告诉服务器你是谁
这就相当于告诉服务器,我是python的requests模块,我来找你了,大多数网站看到“非正常浏览器“的身份都不会返回数据给你的,所以我们要假装成是正常浏览器 我们在刚刚的headers面板里可以看到自己的user-agent的信息,可以复制下来,requests请求的时候加上个参数headers, headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'} 但是复制粘贴还是略麻烦,我们可以用fake_useragent来伪造个user-agent
当然,这样我们还是无法得到第十一页的标题,因为我们在浏览器上输入第十一页的网址的时候,就弹出登录界面,用浏览器访问就相当于是正常浏览器身份了,所以不是user-agent的问题 难道每次我们都要手动登录才能爬吗?有没有方便点的方法?这种情况我们就要用上cookie了 ua = UserAgent() 添加了cookie,尝试一下
|
|
来自: 徒步者的收藏 > 《科学,技术,工业》