本文共 8948 字,大约阅读时间需要 29 分钟。
python爬虫系列之初识爬虫
前言我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的知识的,下面我们进行我们的爬虫讲解
在进行实战之前,我们先给大家看下爬虫的一般讨论,方便大家看懂下面的实例
一、爬汽车之家
汽车之家这个网站没有做任何的防爬虫的限制,所以最适合我们来练手1、导入我们要用到的模块
1
2import requestsfrom bs4 import BeautifulSoup2、利用requests模块伪造浏览器请求
1
2res = requests.get("https://www.autohome.com.cn/news/")
3、设置解码的方式,python是utf-8,但是汽车之家是用gbk编码的,所以这里要设置一下解码的方式
1
2res.encoding = "gbk"
4、把请求返回的对象,传递一个bs4模块,生成一个BeautifulSoup对象
1
soup = BeautifulSoup(res.text,"html.parser")5、这样,我们就可以使用BeautifulSoup给我们提供的方法,如下是查找一个div标签,且这个div标签的id属性为auto-channel-lazyload-atricle
1
23div = soup.find(name="div",attrs={"id":"auto-channel-lazyload-article"})
6、findall方法,是超找符合条件的所有的标签,下面是在步骤5的div标签内查找所有的li标签
1
li_list = div.find_all(name="li")7、查找li标签中的不同条件的标签
1
2345678li_list = div.find_all(name="li")for li in li_list:title = li.find(name="h3")neirong = li.find(name="p")href = li.find(name="a")img = li.find(name="img")if not title: continue
8、获取标签的属性
1
234567
9、如果我们下载一个文件,则需要requests.get这个文件,然后调用这个文件对象的content方法
1
2345678src = img.get("src")img_src = src.lstrip("/")file_name = img_src.split("/")[-1]img_src = "://".join(["https",img_src])print(file_name)ret = requests.get(img_src)with open(file_name,"wb") as f:f.write(ret.content)
10、整体的代码如下
二、爬抽屉
这里我们看下如何爬抽屉1、首先抽屉有做防爬虫的机制,我们在访问的时候必须要加一个请求头
1
23456chouti = requests.get(url="https://dig.chouti.com/",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" })
2、这个请求网站会返回一个cookies,通过下面的方法获取cookies
1
2print(chouti.cookies.get_dict())
3、转换页面为一个BeautifulSoup对象
1
23456789soup = BeautifulSoup(chouti.text,"html.parser")
news_list = soup.find_all(name="div",attrs={"class":"item"})
for news in news_list:
compont = news.find(name="div",attrs={"class":"part2"})print(compont.get("share-title"))
4、下面我们看下如何登陆抽屉
首先我们先通过get方式访问主页
1
2345r1 = requests.get(url="https://dig.chouti.com/",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" })
然后我们通过post方式进行登陆,
1
2345678910111213r2 = requests.post(url="https://dig.chouti.com/login",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, data={ "phone":"86139252938822", "password":"admin", "oneMonth":1 }, cookies=r1.cookies.get_dict() )
最后登陆成功后,我们来实现一个点赞的操作,这里要注意
1
2345678910111213141516171819print(r2.cookies.get_dict())
r3 = requests.post(url="https://dig.chouti.com/link/vote?linksId=25461201",
headers={ "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, # cookies=r2.cookies.get_dict(), cookies=r1.cookies.get_dict(), # 破解抽屉coookies套路 )
爬抽屉所有的代码如下
1
2345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667chouti = requests.get(url="https://dig.chouti.com/",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" })
print(chouti.cookies.get_dict())
soup = BeautifulSoup(chouti.text,"html.parser")
news_list = soup.find_all(name="div",attrs={"class":"item"})
for news in news_list:
compont = news.find(name="div",attrs={"class":"part2"})print(compont.get("share-title"))
r1 = requests.get(url="https://dig.chouti.com/",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" })
r2 = requests.post(url="https://dig.chouti.com/login",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, data={ "phone":"8613925293887", "password":"admin123.", "oneMonth":1 }, cookies=r1.cookies.get_dict() )
print(r2.cookies.get_dict())
r3 = requests.post(url="https://dig.chouti.com/link/vote?linksId=25461201",
headers={ "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, # cookies=r2.cookies.get_dict(), cookies=r1.cookies.get_dict(), # 破解抽屉coookies套路 )
三、爬github
github的登陆是form表单做的,所以我们在登陆github的时候需要把cookies和crsf_token都带上1、访问github的首页
1
2345678r1 = requests.get(url="https://github.com/",
headers={ "user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" } )
2、访问登陆页面,需要在隐藏的input标签中找到token,然后获取到
1
23456789r2 = requests.get(url="https://github.com/login",headers={ "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" } )
login_obj = BeautifulSoup(r2.text,"html.parser")
token = login_obj.find(name="form",attrs={"action":"/session"}).find(name="input",attrs={"name":"authenticity_token"}).get("value")
3、post方式访问登陆页面,携带上用户名和密码,token和cookies
1
23456789101112r3 = requests.post(url="https://github.com/session",
headers={ "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, data={ "login":"admin", "password":"admin", "authenticity_token":token }, cookies=r2.cookies.get_dict() )
4、以后就可以携带r3这个请求访问的cookies进行登陆github后的操作了
1
234567891011obj = BeautifulSoup(r3.text,"html.parser")r4 = requests.get(url="https://github.com/settings/profile",
cookies=r3.cookies.get_dict() )
print(r4.text)
爬github的所有的代码如下
四、爬拉钩网
最后我们来爬一下拉勾网1、首先get方式访问拉勾网的首页
1
234567891011121314import requestsfrom bs4 import BeautifulSoupl1 = requests.get(url="https://passport.lagou.com/login/login.html",
headers={ "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" })
2、登陆拉钩网,他的请求头稍微有点特殊
data很简单,我们直接抓包就可以拿到
主要是请求头中的数据是怎么来的,下面这2个是在我们请求登陆的页面中返回的,由于这2项在script标签中,我们只能通过正则表达式来匹配获取
最后是爬拉勾网的所有的代码
原文地址
转载地址:http://oimml.baihongyu.com/