小白喜提python爬虫(一)看完即会,大神请绕路或是莅临指导!!

Python爬虫 专栏收录该内容
13 篇文章 7 订阅

利用requests库进行静态页面的爬取之豆瓣Top250

我知道网上有很多的爬虫教学,我之前自己也去网上看,但是好像每一个都不同,而且好像都很高级,后来还是别人教我去抓取网页或是节点,这和我在网上看到的其他爬取的方法都不一样,毕竟网上的都很高级,我只是一个小白。
今天演示的是爬取豆瓣电影Top250的电影及其导演和引言。
爬虫分为三步:
1、获取网页
2、解析网页
3、提取信息
4、数据处理

注:以下操作都是在谷歌浏览器进行

那么进行这个之前,你的电脑先要有requests和bs4这两个库。
这里有个小建议呀,如果你直接pip install xxx是很慢的,很痛苦,因为这是在国外的。
在国内的话,你也可以用豆瓣源
①pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn xxx(清华提供的python的各种库)
②http://pypi.douban.com/simple/(豆瓣提供的python的各种库)
ps:网上好多人建议用豆瓣源emmmmm,但是我没有,我一只都是用第一种的。
下面就直接演示用第一种方法,就直接复制就行了,然后在xxx的地方换上所装的库,当然有时也会翻车,尝试多几次就行了,比直接pip install xxx是要好很多的!
在这里插入图片描述
如果没有红色出现,并且像下面这个样子的时候就是完成了(之前安装了requests和bs4,我就只是拿装个ipython作为例子)
在这里插入图片描述
安装完之后就可以呈上代码了,先导入库。

import requests
from bs4 import BeautifulSoup

敲黑板,划重点!BeautifulSoup有解析网页的作用!


1.获取网页

第一步有点繁琐,希望大家有点耐心,后面就很快了!


如果是要获取网页,我们就先了解这个网页嘛,观察这个网页是动态还是静态,那么今天先是以豆瓣电影Top250的页面开刀
先到豆瓣电影Top250的页面。
在这里插入图片描述
因为这是静态的文本,所以就是可以直接在网页代码上面找到相关内容
在这里插入图片描述
那么上面箭头的部分就是我们所要爬取到内容。
由于爬虫需要有请求头,所以我们要先找到请求头
那么下面提供一种懒人请求头的方法
还是以豆瓣网址为例:
1.按下F12,找到NetWork,然后看到name那边,当然第一次进去是空的,那么可以先刷新一下就可以有了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看到头部分,然后将其curl(base)部分复制下来
在这里插入图片描述
然后到python爬虫懒人请求头方法
在这里插入图片描述
呈上代码:

import requests

cookies = {
    'bid': 'rmK1EcA3r2s',
    'douban-fav-remind': '1',
    'll': '108307',
    '__yadk_uid': 'EJwuEzTIVazCD6p6x1iHue85SnWjRlB5',
    '_vwo_uuid_v2': 'D34D2B043520CA650F6C4DC668A88DA31|597fb0686dd33356e891115ef92a29ba',
    '__gads': 'ID=63dfd78ef423c877:T=1580267930:S=ALNI_MZzMqVe3mnbI1vr-EzQAwwxmvaC5A',
    'ct': 'y',
    '__utmz': '30149280.1581656678.9.4.utmcsr=baidu|utmccn=(organic)|utmcmd=organic',
    '_pk_ref.100001.4cf6': '%5B%22%22%2C%22%22%2C1582597634%2C%22https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%25E8%25B1%2586%25E7%2593%25A3%26rsv_spt%3D1%26rsv_iqid%3D0xad5f1d05001c7050%26issp%3D1%26f%3D8%26rsv_bp%3D1%26rsv_idx%3D2%26ie%3Dutf-8%26tn%3D62095104_36_oem_dg%26rsv_enter%3D1%26rsv_dl%3Dtb%26rsv_sug2%3D0%26inputT%3D1216%26rsv_sug4%3D1779%22%5D',
    '_pk_ses.100001.4cf6': '*',
    'ap_v': '0,6.0',
    '__utma': '30149280.2011140489.1580267903.1581656678.1582597635.10',
    '__utmc': '30149280',
    '__utmb': '223695111.0.10.1582597635',
    '_pk_id.100001.4cf6': '6057282de3ce6902.1580267911.8.1582598700.1581658464.',
    '__utmt_douban': '1',
}

headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.16 Safari/537.36',
    'Sec-Fetch-User': '?1',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'navigate',
    'Referer': 'https://movie.douban.com/chart',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

response = requests.get('https://movie.douban.com/top250', headers=headers, cookies=cookies)

那么第一步获取网页就完成了!
requests.get就是获取到这个网页了!你可以吧response的出来看看。
在这里插入图片描述
响应200!成功响应!


2.解析网页


那么这一步就要用到BeautifulSoup了!

response.encoding='utf-8'
soup = BeautifulSoup(response.text, 'html.parser')

第一行是防止乱码的情况,所以就加入了encoding=“utf-8”
(PS:大家也尽量避开英文的名字,不然也可能出现乱码的情况)
第二行就是解析网页了。
第二步结束啦啦啦啦!!!很快吧!嘻嘻


3.提取信息


在这里插入图片描述
在这里插入图片描述
但是注意了,这样复制下来仅仅只是复制了一个电影题目而已,就单单是《肖申克的救赎》这一个点而已,那么了解过前端的同学呢都知道这些排版都是有规律的,不然就会显得没有逻辑可寻。
我们可以把两个标题都给复制下来,就会有以下结果:
《肖申克的救赎》
#content > div > div.article > ol > li:nth-child(1) > div > div.info > div.hd > a > span:nth-child(1)
《霸王别姬》
#content > div > div.article > ol > li:nth-child(2) > div > div.info > div.hd > a > span.title
我们可以发现大部分元素都是一样的,但是有个别元素不同,那么我们就可以将不同元素的都去除掉,留下相同元素,就可以进行相关节点的抓取
就会有以下的代码

title = "#content > div > div.article > ol > li > div > div.info > div.hd > a"

那么其他的元素(电影导演,电影引言)节点也是这样的啦!
在这里插入图片描述
记得不是点中文那里,是点那些英文那里才会有这个selector噢

dirtor = "#content > div > div.article > ol > li > div > div.info > div.bd > p:nth-child(1)"
quote='#content > div > div.article > ol > li > div > div.info > div.bd > p.quote'

那么第三部分提取元素就完成啦!!!嘻嘻~


4.数据的处理


我们要先将提取的元素进行分解。

    a=soup.select(title)
    b=soup.select(dirtor)
    c=soup.select(quote)

当然如果就直接将以上几个节点打出来的话,是有一些非汉字的东西的,比如说一些前端东西。
那么直接上.text就行了,就不需要用到正则表达式去截取字符串了。

a[i] = a[i].text
b[i] = b[i].text
c[i] = c[i].text

最后再直接打出来就行了。

print(" 电影名字 :{}\n 电影导演:{}\n 电影引言: {}\n ".format(a[i],b[i],c[i]),end="")

当然啦,现在其实只是完成十分之一,因为我们只是完成了第一页而已,还有剩下九页的内容。


附加部分.数据的完善


那么我们可以观察豆瓣网页,就可以发现,页数之间也是有规律的!
在这里插入图片描述
我们可以看到这个上面的start的变化(第二页)
下面的http那一行其实就是那个网页了嘛
在这里插入图片描述
我们可以看到这个上面的start的变化(第三页)

有木有!!xiongdei!25!50!规律就出来了,由于每个页面都是相似的,节点也是相似的,所以我们就可以进行其他的节点的抓取!
那么我们一个for循环就可以了!利用其字符串的拼接。

for k in range(0,10):
    i=k*25
    res = requests.get('https://movie.douban.com/top250?start='+str(i)+'&filter=', headers=headers)

这样就可以将十页的元素都提取出来了。
如何我们想将其放入本地的文件的话呢可以这样操作
要先导入os库

import os

打开一个文件

fo = open("豆瓣Movies Top250.txt",'a',encoding="utf-8")

将爬取的内容放入其中

fo.write(a[i])
fo.write(b[i])
fo.write(c[i])

关闭文件

fo.close()

完整代码展示

import os
import requests
from bs4 import BeautifulSoup
cookies = {
    'bid': 'E4gkXiSwBrM',
    'douban-fav-remind': '1',
    'll': '118088',
    '__yadk_uid': 'hkoioWDL1agCeIP3VyFfyXTl6SBJ1uf3',
}
headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'DNT': '1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
    'Sec-Fetch-User': '?1',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'navigate',
    'Referer': 'https://movie.douban.com/top250?start=225&filter=',
    'Accept-Encoding': '',
    'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
}
params = (
    ('start', '0'),
    ('filter', ''),
)
fo = open("豆瓣Movies Top250.txt",'a',encoding="utf-8")
for k in range(0,10):
    i=k*25
    response = requests.get('https://movie.douban.com/top250?start='+str(i)+'&filter=', headers=headers)
    response.encoding='utf-8'
    soup = BeautifulSoup(response.text, 'html.parser')
    title = "#content > div > div.article > ol > li > div > div.info > div.hd > a"
    dirtor = "#content > div > div.article > ol > li > div > div.info > div.bd > p:nth-child(1)"
    quote='#content > div > div.article > ol > li > div > div.info > div.bd > p.quote'
    a=soup.select(title)
    b=soup.select(dirtor)
    c=soup.select(quote)
    for i in range(0,len(a)):
        a[i] = a[i].text
        b[i] = b[i].text
        c[i] = c[i].text
        fo.write(a[i])
        fo.write(b[i])
        fo.write(c[i])
        print(" 电影名字 :{}\n 电影导演:{}\n 电影引言: {}\n ".format(a[i],b[i],c[i]),end="")
fo.close()

控制台效果:
在这里插入图片描述
文本效果:
在这里插入图片描述
在这里插入图片描述

但是关于这个爬取信息的排版我还不是很懂,所以就没进行排版的操作,所以就是这样的了。如果有大佬看到的话,可以指点一下吗。。。(估计大佬也不会看这种级别的。。)

分享一个我在爬虫当中的问题:就是我有一次爬虫的时候,第一次运行爬下来了,第二次就不行了,所爬取的网页也会有一个提示,说检查到啥啥啥的,不记得了,这就是反爬虫了,我也不懂怎么解决,我当时是觉得这个ip不能用了,就用手机热点试试,结果就又可以了。

这就是我的第一个爬虫,希望能帮到想学习的你,我也是一个小白,有什么地方错的或是你不理解的,也可以在下面说说,看到我也会回复的!嘻嘻~

  • 14
    点赞
  • 1
    评论
  • 17
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将求下来的数据进行过滤,取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能发生被反爬、效率低下等。因此我们又增加了两个章节用来爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为个专业的爬虫框架,使用他可以快速高我们编写爬虫程序的效率和速度。另外如果台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2021 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值