轻松掌握Python爬虫,从入门到精通

 更新时间:2024年03月27日 14:38:22   作者:COMEGy  
Python爬虫学习完整版来了!想成为一名爬虫高手,掌握数据采集的技能吗?这份指南将带你从零开始,一步步掌握Python爬虫的各种技巧,让你轻松获取海量数据,需要的朋友可以参考下

一、什么是爬虫

网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析也成为如今主流的爬取策略。

1 爬虫可以做什么

你可以爬取网络上的的图片,爬取自己想看的视频等等,只要你能通过浏览器访问的数据都可以通过爬虫获取。

2 爬虫的本质是什么

模拟浏览器打开网页,获取网页中我们想要的那部分数据

学习案例:爬取豆瓣电影 Top 250的基本信息

引入第三方模块

# 引入第三方模块
from bs4 import BeautifulSoup #网页解析,获取数据
import re    #正则表达式,进行文字匹配
import urllib.request,urllib.error   #制定URL,获取网页数据
import xlwt    #进行Excel操作
import sqlite3   #进行数据库操作

正则表达式——制定获取数据规则

# 影片详情链接规则
findLink=re.compile(r'<a href="(.*?)">')   #创建正则表达式对象,表示规则(字符串模式)
findImg=re.compile(r'<img.*src="(.*?)?"',re.S)  #影片图片
findTitle=re.compile(r'<span class="title">(.*)</span>')  #影片名字
findRating=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')   #影片评分
findJudge=re.compile(r'<span>(\d*)人评价</span>')   #影片评价人数
findIng=re.compile(r'<span class="ing">(.*)</span>')   #找到概况
findBd=re.compile(r'<p class="">(.*?)</p>',re.S)   #找到影片的相关内容
 

完整代码

# 引入第三方模块
from bs4 import BeautifulSoup #网页解析,获取数据
import re    #正则表达式,进行文字匹配
import urllib.request,urllib.error   #制定URL,获取网页数据
import xlwt    #进行Excel操作
import sqlite3   #进行数据库操作
 
def main():
    baseurl="https://movie.douban.com/top250?start="
    dataList=getData(baseurl)
    savepath=".\\豆瓣电影Top250.xls"
 
# 影片详情链接规则
findLink=re.compile(r'<a href="(.*?)">')   #创建正则表达式对象,表示规则(字符串模式)
findImg=re.compile(r'<img.*src="(.*?)?"',re.S)  #影片图片
findTitle=re.compile(r'<span class="title">(.*)</span>')  #影片名字
findRating=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')   #影片评分
findJudge=re.compile(r'<span>(\d*)人评价</span>')   #影片评价人数
findIng=re.compile(r'<span class="ing">(.*)</span>')   #找到概况
findBd=re.compile(r'<p class="">(.*?)</p>',re.S)   #找到影片的相关内容
 
def getData(baseurl):
    dataList=[]
    for i in range(0,10):# 调用获取页面信息的函数 10次
        url=baseurl+ str(i*25)
        html=askURL(url)   # 保存获取到的源码
        soup=BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"):  #查找符合要求的字符串
            data=[] #保存电影信息
            item =str(item)
            #获取影片详情链接
            link=re.findall(findLink,item)[0]   #re库用来通过正则表达式查找指定的字符串
            data.append(link)    #添加链接
            imgSrc=re.findall(findImg,item)[0]
            data.append(imgSrc)  #添加图片
            titles=re.findall(findTitle, item)[0]
            if(len(titles)==2):              #片名可能有两个名字,一个中文,一个外文
                ctitle=titles[0]
                data.append(ctitle)           #添加中文名
                otitle=titles[1].replace("/","")
                data.append(otitle)            #添加外文名
            else:
                data.append(titles[0])  # 添加图片
                data.append(' ')            #留空,保持Excel数据一致性
 
            rating=re.findall(findRating, item)[0]
            data.append(rating)  # 添加评分
 
            judgeNum = re.findall(findJudge, item)[0]
            data.append(judgeNum)  # 添加评分人数
 
            ing = re.findall(findIng, item)
            if len(ing)!=0:
                ing=ing[0].replace("。","")
                data.append(ing)  # 添加概述
            else:
                data.append(" ")
            bd = re.findall(findBd, item)[0]
            bd=re.sub('<br(\s+)?/>(\s+)?'," ",bd)
            bd=re.sub('/'," ",bd)
            data.append(bd.strip())  # 添加影片的相关内容
 
            dataList.append(data)    #把处理好的电影信息放入dataList
        print(dataList)
    return dataList
 
# 得到指定一个URL的网页内容
def askURL(url):
    # head用户代理,本质上告诉浏览器我们接收什么水平的数据
    head={
        "User-Agent": "Mozilla / 5.0(Linux;Android6.0;Nexus5 Build / MRA58N) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.87 Mobile Safari / 537.36"
    }
    request=urllib.request.Request(url,headers=head)
    html=""
    try:
        response=urllib.request.urlopen(request)
        html=response.read().decode("utf-8")
        # print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
 
    return html
 
 
def saveData(savepath):
    print("save.....")
 
 
if __name__ =="__main__":
    # 调用函数
    main()

到此这篇关于轻松掌握Python爬虫,从入门到精通的文章就介绍到这了,更多相关Python爬虫学习内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈pytorch中stack和cat的及to_tensor的坑

    浅谈pytorch中stack和cat的及to_tensor的坑

    这篇文章主要介绍了pytorch中stack和cat的及to_tensor的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Spyder中如何设置默认python解释器

    Spyder中如何设置默认python解释器

    Spyder作为一款流行的Python IDE,支持用户自定义Python解释器,包括虚拟环境的设置,通过打开Spyder,选择“Tools”->“Preferences”,在弹出窗口中选择“Use the following Python interpreter”后,浏览并选择相应的解释器或虚拟环境路径
    2024-09-09
  • 如何用Python将图片转为字符画

    如何用Python将图片转为字符画

    本文主要介绍了用Python将图片转为黑白字符画的方法,使用ascii字符把图片转为黑白字符画,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python如何将数字变成带逗号的千分位

    Python如何将数字变成带逗号的千分位

    这篇文章主要介绍了Python如何将数字变成带逗号的千分位,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 详解python opencv、scikit-image和PIL图像处理库比较

    详解python opencv、scikit-image和PIL图像处理库比较

    这篇文章主要介绍了详解python opencv、scikit-image和PIL图像处理库比较,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 基于Python实现简易文档格式转换器

    基于Python实现简易文档格式转换器

    这篇文章主要介绍了基于Python和PyQT5实现简易的文档格式转换器,支持.txt/.xlsx/.csv格式的转换。感兴趣的小伙伴可以跟随小编一起学习一下
    2021-12-12
  • 深入理解Python虚拟机中字节(bytes)的实现原理及源码剖析

    深入理解Python虚拟机中字节(bytes)的实现原理及源码剖析

    在本篇文章当中主要给大家介绍在 cpython 内部,bytes 的实现原理、内存布局以及与 bytes 相关的一个比较重要的优化点—— bytes 的拼接,需要的可以参考一下
    2023-03-03
  • python机器学习之KNN分类算法

    python机器学习之KNN分类算法

    这篇文章主要为大家详细介绍了python机器学习之KNN分类算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • pygame游戏之旅 如何制作游戏障碍

    pygame游戏之旅 如何制作游戏障碍

    这篇文章主要为大家详细介绍了pygame游戏之旅的第6篇,教大家如何制作游戏障碍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 利用Python实现批量转换图片格式

    利用Python实现批量转换图片格式

    本文重点介绍普通图片格式怎么相互转换,如jpg格式图片怎么批量转化为png格式,在深度学习项目中,有时我们收集到的数据集图片格式不统一,有的代码支持多种格式图片输入,有的则只支持个别格式,所以这时,我们需要通过脚本来转换图片格式,不说废话,直接上代码
    2025-08-08

最新评论