对比上个实例,本次爬虫教程实现了简单的防反爬策略,反爬机制是网站维护中常见的手段,用白话来讲,就是网站维护人员为了不让你从网站上爬取某部分信息,通过简单的检查机制,将本次请求封死,而本次教程就是教你怎么实现反反爬(懂得都懂哈,双重否定为肯定)
哎,欢迎小可爱光临,你可能会问,彩蛋呢,彩蛋呢,不要急,后面你就知道啦!!
在本文章的末尾将为你列出简单爬虫的爬取代码基本框架!!
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)
自行运行哈!!!