用最简单的白话教你入门python爬虫(二)+“彩蛋“

对比上个实例,本次爬虫教程实现了简单的防反爬策略,反爬机制是网站维护中常见的手段,用白话来讲,就是网站维护人员为了不让你从网站上爬取某部分信息,通过简单的检查机制,将本次请求封死,而本次教程就是教你怎么实现反反爬(懂得都懂哈,双重否定为肯定)

哎,欢迎小可爱光临,你可能会问,彩蛋呢,彩蛋呢,不要急,后面你就知道啦!!

在本文章的末尾将为你列出简单爬虫的爬取代码基本框架!!

1.教学内容:

1.1本次教学实例:爬取豆瓣网页
1.2本次教学特色:简单防反爬

2.爬取豆瓣电影TOP250

网址:在这里插入图片描述

哎,这里就有小可爱会问,后面红框里的东西是啥?在这里我先告诉你这是请求参数,在后续你将会慢慢理解。实际上的豆瓣网址是去除红框部分,即https://movie.douban.com/
但此时你访问进去的主页是豆瓣主页,而不是TOP250的主页,简单来说,网站内部有很多网页,主页还有很多分页,你点击一个超链接就会跳转到另一个网页,而每次跳转,对应的URL即网址会发生变化,而变化的部分就是后面的请求参数;说到这里小可爱们可以理解了吧,如果还有疑问,在评论区留言我会一一回复。

下面给出本次爬取代码及详细解析
import requests #导去requests库

url="https://movie.douban.com/top250?start=0" #豆瓣top250网址

r=requests.get(url=url) #获取响应对象
code=r.status_code #status_code是响应对象的属性,它会返回状态码
print(code) #打印状态码
demo=r.text[:1000] #如果访问成功,demo是有值的
print(demo) #打印demo,即网页内容
运行结果:

在这里插入图片描述

哎,有小可爱会问了,咋回事,为啥没输出内容,当然没内容啦,都返回418了,如果返回的是200,你肯定会得到网页内容;418就是被网站反爬给截断了;那要怎么解决呢,别急,下面慢慢给你讲解。

为啥会被反爬?很简单,网站知道了你是一个爬虫;怎么知道的?肯定是通过某种方法对比检测的;那是通过什么对比呢?在这里我直接跟你说是通过请求头,那什么是请求头呢?请看下图

在这里插入图片描述
在这里插入图片描述
任意选择一个点击
在这里插入图片描述

通过user-agent对比?对,如果你是爬虫,那么user-agent肯定是不一样的,网站默认只允许在允许范围内的浏览器访问;那怎么解决呢?很简单,你只需要伪装成浏览器,怎么伪装?穿上浏览器的衣服呀;上代码,看完你就会懂
import requests #导去requests库

url="https://movie.douban.com/top250?start=0" #豆瓣top250网址
headers={
    "user-agent":"chrom/10"
}
r=requests.get(url=url,headers=headers,timeout=100) #获取响应对象
code=r.status_code #status_code是响应对象的属性,它会返回状态码
print(code) #打印状态码
demo=r.text[:1000] #如果访问成功,demo是有值的
print(demo) #打印demo,即网页内容

在这里插入图片描述
时间参数?是啥?为啥要传入?
小可爱呀,浏览器是不是给人访问的?你能一秒就获取上万条乃至更多的数据嘛?那肯定不能啊,你不设置的话,多次访问,网站会将你ip封掉的,哎,说漏嘴了

运行结果:

在这里插入图片描述

本期彩蛋:ip被封,哈哈

哎,气不气,我就是懒,不想再写代码去有意被封,总的来说,本人在学习前期被豆瓣封了两次ip,一侧是一天,一次是几个小时;总之如果你想爬取大量数据,还是加上时间参数哈,不要设置过低,你是人哦!!!

后续精彩不断,快快关注我!!!
有疑问在评论区留言哦!、、

给出爬取豆瓣前25名的电影名字爬取,自行先研究预习
import requests #导去requests库
from bs4 import BeautifulSoup
url="https://movie.douban.com/top250?start=0" #豆瓣top250网址
headers={
    "user-agent":"chrom/10"
}
r=requests.get(url=url,headers=headers) #获取响应对象
demo=r.text
List=[]
t=BeautifulSoup(demo,"html.parser")
for i in range(0,25):
    item=t.find_all("div","item")[i]
    data=[]
    data.append(item.find_all("span","title")[0].text)
    List.append(data)
print(List)

自行运行哈!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉不拉斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值