(python)爬虫----八个项目带你进入爬虫的世界

本文介绍了八个Python爬虫项目,包括豆瓣电影Top 250的爬取、彼岸图网美女图片下载、虎牙小姐姐跳舞视频抓取、CSDN登录操作、使用selenium模拟浏览器以及Scrapy爬虫框架的应用。内容涵盖了网页爬取、数据解析、翻页处理、登录机制、动态加载内容抓取和爬虫框架的基本使用。同时,文章还讨论了爬虫注意事项,如遵守Robots协议和应对反爬机制。
摘要由CSDN通过智能技术生成

目录

(一)入门--豆瓣

一、学前要求知识

二、目标

三、什么是爬虫

四、爬取网页

五、解析网页

六、翻页

八、代码

(二)你的心,我懂得~~--彼岸图网

一、目标

二、爬取网页

三、保存图片

四、代码

(三)视频--虎牙小姐姐跳舞视频

一、目标

 二、获取详情页链接

三、获取视频地址

四、保存数据

五、完整代码

 (四)登录--CSDN

一、目标

 二、如何登录

三、传参链接

四、代码构建

五、完整代码

(五)、模拟人操作浏览器(selenium)

一、引子

二、selenium下载

三、selenium+python

四、代码

五、后记

(六)爬虫框架--scrapy的使用(汽车之家)

一、为什么要使用scrapy

二、scrapy框架整体架构

三、scrapy下载

四、创建scrapy项目

五、创建爬虫文件

六、爬取汽车之家

(七)爬虫注意事项

一、Robots协议

二、遵守Robots协议也有可能犯法

(八)反爬与反反爬

        反爬手段与处理措施

                headers字段限制和POST、GET请求参数限制

                IP限制

                JS加密

                等

后续


(一)入门--豆瓣

一、学前要求知识

  1.  python基础
  2.  前端基础

二、目标

     要爬的网站是豆瓣电影 Top 250 (douban.com)

     需要爬到每个电影的排名、名字、以及评分。

       这是不少人踏上爬虫之路的第一个网站,现在让我们来迈出爬虫的第一步吧!

三、什么是爬虫

        简单来说:爬虫就是用机器来模拟人浏览网页的过程。

四、爬取网页

        使用python来爬虫,需要借助一个库,这个库不是python自带的,所以需要下载,下载方式就跟正常下载库的方法一样。

        导入该库,就不在话下了吧!

        在正式爬取网页前,我们需要了解,平时我们浏览网页的过程实际上就是向浏览器发起请求的过程。而请求又分很多种,最常见的为GET和POST请求,在这里我们暂时不解释GET和POST的区别。

        我们要爬取豆瓣250时,当然也要知道豆瓣250的请求方式,我们用浏览器进入豆瓣250,然后按F12或者点击鼠标右键进入开发者模式,然后点击上方的网络,或者是英文 Network。

然后刷新页面,发现突然出现了一大堆,不要慌,这个就是我们在发送请求时,服务器和客户端进行网络传输发送与接收的数据包,随便点击一个,出现一个框框,然后点击框框上方的预览或者英文Preview,会大致明白这个数据包传输的是什么数据。

        最终找到了传输的数据对我们有用的数据包,再点回标头或者英文Headers,会在常规内看见请求方式的字样,后面跟着的就是该数据包的请求方式,豆瓣250的请求方式则是GET。等等先不要关闭开发者模式,我们再往下看还有一个请求标头,那这是什么啊?这个对于爬虫来讲是一层障碍,因为有些网站它会检查请求头,以此来判断是爬虫还是正常访问。在爬取网页时,一般都要加一个user-agent,以防网页有轻微的反爬操作,就导致该爬虫不能使用了。接着再点击响应或者英文Response,这就是服务器发送数据,即响应正文。那么进行爬虫的前期准备就完成了。(通常你对哪个链接发送的请求,请求信息就在哪个数据包内)

import requests

url = f'https://movie.douban.com/top250'
headers = {
        'User-Agent': 'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like                     Gecko)Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64',
    }
html = requests.get(url, headers=headers)
web_page = html.text

        因为是GET请求,所以要用requests的get方法。打印html,会发现它是Response对象,它有一个text方法,会获取该请求的数据信息,我们打印web_page,发现打印的结果是html源码也就是该数据包的响应正文。那么我们也完成了一次爬取。但是爬取出来的数据好像用处不大,这样的数据还不如正常访问网站的用处大,那么爬虫的用处也完全没有嘛。但是,爬虫还有一个重要的环节,那就是清洗数据,一个网页上的数据肯定是有一点对我们有用,大部分对我们用处不大,所以需要将有用的数据清洗出来。

五、解析网页

       下面要清洗网页上的数据,这一过程叫网页解析。

        解析网页一般有两种方法:

  1. 正则匹配(也就是python中re库)正则表达式,re,Python,正则表达式实例
  2. Xpath。

        今天我使用xpath来解析网页。

        在python中使用xpath,需要下载lxml解析库。

pip install lxml

        使用前需要先将html源码实例化成etree对象。

from lxml import etree

movie = etree.HTML(web_page)

        接着使用etree对象的xpath属性,然后写入要匹配的路径即可。(成块爬取,将一个电影的所有信息先爬下来,然后在爬需要的信息,这样爬取的信息才一定会匹配。)

movies = middle.xpath('//*[@class="item"]')

    for movie in movies:
        rank = movie.xpath('.//em/text()')[0]
        title = movie.xpath('.//span[1]/text()')[0]
        score = movie.xpath('.//*[@class="rating_num"]/text()')[0]
        print(f'排名:{rank},电影名:{title},评分:{score}')

        这样就完成数据的清洗。

六、翻页

        聪明的你肯定发现我们只爬到了一页数据。

        那么怎么爬取豆瓣250的所有数据呢,我们先不着急写代码,先翻在浏览器上翻上几页观察url(网址)的变化,发现url后面的start,每次都加25。你是不是想到了怎么爬取所有的数据,等等先不要着急,再试下第一页是否符合该规律,因为有些网址的第一页会与后面的没有规律,当然豆瓣250是符合规律的。

八、代码

import requests
from lxml import etree

total_page = 10

for page in range(0, total_page * 25, 25):
    url = f'https://movie.douban.com/top250?start={page}&filter='
    headers = {
        'User-Agent': 'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64',
    }

    html = requests.get(url, headers=headers)
    web_page = html.text
    middle = etree.HTML(web_page)
    movies = middle.xpath('//*[@class="item"]')

    for movie in movies:
        rank = movie.xpath('.//em/text()')[0]
        title = movie.xpath('.//span[1]/text()')[0]
        score = movie.xpath('.//*[@class="rating_num"]/text()')[0]
        print(f'排名:{rank},电影名:{title},评分:{score}')

(二)你的心,我懂得~~--彼岸图网

一、目标

        要爬的网站是4K美女壁纸_高清4K美女图片_彼岸图网 (netbian.com)

        需要爬到每个美女图片,并将其保存下来。

二、爬取网页

        可以快速得知这个网页是get请求,于是有了以下代码:

import requests

url = 'https://pic.netbian.com/4kmeinv/'
headers = {
    'User-Agent': 'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64',
}
html = requests.get(url, headers=headers)
web_page = html.text

        打印web_page,发现打印内容是乱码。在以下的这个位置一般都会有这个网站的编码格式

web_page = html.text.encode('iso-8859-1').decode('gbk')

        (前面的编码形式encode是哪个编码格式是我试出来的,一般都是utf-8。至于为什么这个是iso-8859-1,从网上搜索的答案是ISO-8859-1 是大多数浏览器默认的字符集

        这样输出的就是正常的html源码啦

        由于在列表页的图片不清晰,所以需要进入详情页下载图片,发现详情页链接都在li下,但是抓取到的li中的链接只有一半,需要加上所缺失的。再浏览器中进入详情页分析缺失那一部分,多分析几个,就会发现它们缺失的是什么啦。

        仔细观察网页会发现有一个特殊的图片,它不是我们想要的小姐姐,但是打印出html源码会发现它并没有出现在源码中。但是如果它出现在源码中,可以利用它多个class属性进行排除。

lis = web_html.xpath('//*[@class="slist"]//li')

base_url = 'https://pic.netbian.com'
for li in lis:
    original_url = base_url + li.xpath('.//a/@href')[0]
    li_class = li.xpath('./@class')

         有了详情页的url后,自然是再发送一次请求进入详情页,取到图片啦~~(记得图片名也要取到哦,取图片名字是为了作为存储得文件名。同样这里的图片链接也不全,需要自己补充)

original_html = requests.get(original_url, headers=headers)
        original_page = original_html.text.encode('iso-8859-1').decode('gbk')
        original_page = etree.HTML(original_page)
        img_name = original_page.xpath('//*[@id="img"]/img/@title')[0]
        img_path = 'https://pic.netbian.com/'\
                   + original_page.xpath('//*[@id="img"]/img/@src')[0]

        (点击下载原图需要登录,所以这里是直接爬取的图片)

三、保存图片

        首先在与爬虫文件同一级处创建一个文件夹用来保存小姐姐。

        下载文档(图片是文档的一种):其实也就是向文件中写入数据

        读写文件是爬虫经常使用的操作。

知识补充:IO操作:读写文件是最常见的IO操作。IO操作还包括访问网络,等待用户输入数据。IO操作相对于内存计算来说是比较慢的。

        pytho

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值