少年想学爬虫,这些web知识点怎能不会-知识点概括以及例子

爬虫是什么

爬虫就是用我们的代码来模拟浏览器,操控浏览器。

爬虫可以做什么

大体可分为两类,一种以获取数据为目的,一种以自动化为主。

为什么要这样做

我们上网看似自由。其实也不自由。数据方面,服务器返回的数据的处理逻辑都被程序员写死了。对面的程序员不可能跟你想的一样。也不可能兼顾所有人。所以你需要定制化的专属于你的处理逻辑。自动化方面,就是为了高效。或者说是偷懒。一些重复的工作,可以让代码帮我们执行。比如大学生每次开学放假都要抢高铁票。我设定一下时间,就不用管了,到该买票的时候自动买了。

爬虫真的违法吗

分情况。学爬虫之前一定要学一下web。不管是python web 还是java web。有了web知识才能学好爬虫。同时你换位思考一下就能大概知道自己的行为是否合法,假如你这样设计网站你希望别人爬吗。假如一个网站就是公布数据,希望有人可以从数据中分析,或者使用。当然可以爬了。中国气象局的天气预报,数据写在html里,没任何防爬措施。天气预测问题是机器学习中的经典问题。当然可以爬。假如一个网站是靠这些东西盈利,那爬之前就要小心点。比如Openai,靠api挣钱,你模拟浏览器去用chatgpt。就很难,也不合法。

URl

url 统一资源定位符
我们爬取网站需要有一个准确的目标,哪台主机的哪个资源,而URl正是提供了这个目标。

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

这是url的格式

  • protocol 传输协议,我们一般用http协议。有时候我们会见到https这是http协议加了一些加密让传输更加安全。
  • hostname[:port],这是主机地址和端口号,端口号默认是80不用我们填写。hostname本来是ip但被域名替代。ip和域名都可以找到正确的主机。域名就是我们口头说的网址 。
  • path是文件路径,就像你本地找文件需要一个路径一样,你要爬取别人网站的东西也要指定路径。这个路径并不难找,浏览器上方的url就给出了地址。
  • [;parameters] 参数
  • [?query] 可选参数,这两个都是参数可以帮助我们定位资源。
def crawler(goods):key = parse.quote(goods)#这里写你想爬取网站的urlurl = ''res = get_response(url)print(url)

请求

理解了url我们接下来要知道web其实就是,客户端不断向服务端发送请求,服务端不断响应的过程,请求有post请求和get请求。对于爬虫来说用哪个都行,我用post请求和get请求都可以得到答复,如果对它们两感兴趣可查阅其它文章。

这个请求的过程一直是在浏览器上做,我们做爬虫其实就是不在浏览器上做了,而是用自己的代码来完成请求。这样我们就可以用代码来处理请求得到数据。

#请求
response = requests.get(url, headers=headers).content.decode('utf-8')

headers

headers请求头,在发送请求时一般会带上一个请求头,请求头里写入了一些关于请求的信息,例如我希望的返回内容的格式,这个请求是由什么端发出的浏览器还是程序,有些网站不想被爬取,那我们就要伪造是浏览器发送的请求。其中最重要的cookie。

#headers也要F12观看具体,这里只是举个例子headers = {'cache-control': 'max-age=0','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','sec-fetch-site': 'same-origin','sec-fetch-mode': 'navigate','sec-fetch-user': '?1','sec-fetch-dest': 'document','accept-language': 'zh-CN,zh;q=0.9','cookie': '你的cookie',}

cookie

为什么我们在登录上一个网站后短时间内不用再重复登录,这就是cookies的功劳,当我们登录网站后,服务端会返回一个cookies,这个cookies存放在浏览器,用F12可以查看。等下次请求时会带上这个cookies来代替账号密码验证。所以对于请求一些需要登录账号才能访问的资源就要在headers中写出cookies或账号密码。推荐使用cookies,直接用账号密码有被泄露的风险。

正则表达式

爬取的结果我们可以用正则表达式来提取我们想要的部分。如果返回结果是html,我们也可以用一些python库来解析。

#这是个例子根据你爬取的具体网站写正则
title = re.findall(r'\"raw_title\"\:\"(.*?)\"', response)nick = re.findall(r'\"nick\"\:\"(.*?)\"', response)[:-1]item_loc = re.findall(r'\"item_loc\"\:\"(.*?)\"', response)price = re.findall(r'\"view_price\"\:\"(.*?)\"', response)sales = re.findall(r'\"view_sales\"\:\"(.*?)\"', response)

状态码

当我们请求时会得到一个状态码,200请求成功。这个代码没啥意义。重点是记忆错误的状态码,来更改我们的程序。
比如404资源未找到,我们就要看一下自己的url是否写错。

完整代码

有了上面的知识我们就可以写个简单的爬虫程序了
爬取淘宝商品信息

import re
import time
from urllib import parseimport requestsdef get_response(url):headers = {'cache-control': 'max-age=0','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','sec-fetch-site': 'same-origin','sec-fetch-mode': 'navigate','sec-fetch-user': '?1','sec-fetch-dest': 'document','accept-language': 'zh-CN,zh;q=0.9','cookie': '你的cookie',}response = requests.get(url, headers=headers).content.decode('utf-8')#这是个例子根据你爬取的具体网站写正则title = re.findall(r'\"raw_title\"\:\"(.*?)\"', response)nick = re.findall(r'\"nick\"\:\"(.*?)\"', response)[:-1]item_loc = re.findall(r'\"item_loc\"\:\"(.*?)\"', response)price = re.findall(r'\"view_price\"\:\"(.*?)\"', response)sales = re.findall(r'\"view_sales\"\:\"(.*?)\"', response)return [title, nick, item_loc, price, sales]def crawler(goods):key = parse.quote(goods)#你想爬取的网站urlurl = ''res = get_response(url)print(url)time.sleep(1)for i in range(0,44):if __name__ == '__main__':crawler("篮球")

这里的cookies需要自己F12查看

注意当短时间内请求太多会被锁ip,网站要防止dos攻击很正常,可用代理ip解决。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部