首页 > 编程语言 >Python爬虫入门

Python爬虫入门

时间:2023-08-01 20:56:27浏览次数:37  
标签:网页 入门 Python 爬虫 虚拟环境 conda div 源代码 class

前言

网页构成

首先介绍一个网页的基本构成:HTML负责网页的结构,CSS负责样式的美化,Javascript负责交互逻辑。

  • HTML
  • CSS
  • Javascript

点击 F12打开开发者工具(部分电脑可能为Fn + F12),使用元素选择工具,再将鼠标指针移动到任意网页元素,单击该元素则该元素对应的网页源代码会被选中。
从网页源代码中可看出,大部分网页元素是由诸如“<xxx>文本内容</xxx>”这样的源代码定义的,这些标识符称为HTML标签,它们有以下基本类型:

  • <div>
  • <ul>、<ol>、<li>
  • <h>
  • <a>
  • <p>
  • <span>
  • <img>
  • <kbd>
    更为详细的介绍可在菜鸟教程-HTML中了解与进一步学习。

一些相关知识

网页的动态加载与静态加载

静态加载意为服务器一次性发送所有网页数据给终端,动态加载意为服务器发送的是一个网页模板,而后终端再通过Ajax或其他方式将数据(通常是JSON数据包)填入到模板中。有些网站能做到不刷新网页就能向服务器申请内容,比如b站的评论区,实际上数据是在点击了下一页后才申请下来的,这就是动态网页的典型应用。

正则表达式

正则表达式用于对字符串进行匹配操作,符合正则表达式的字符串能被匹配并提取出来。
基本类型:

  • 普通字符
  • 元字符

普通字符包含所有大写字母和小写字母、所有数字、所有标点符号、汉字和一些其他符号,元字符是指在正则表达式中具有特殊含义的专用字符,具体学习可参考菜鸟教程-正则表达式

XPath表达式

XPath表达式描述了从一个节点到另一个节点的路径,在python中,使用第三方模块lxml中的etree类可以将网页源代码实例化为一个etree对象,该对象可以视为一个树形结构,就像二叉树那样,通过XPath路径我们可以定位一个上级标签的任意下级标签。
在网页的开发者工具中,使用元素选择工具选定一个元素,在源代码处右击复制就可以得到它的XPath表达式。

Python库模块介绍

requests

简介

requests是pyhton的一个第三方模块,主要作用为模拟浏览器对服务器发起http或https协议的网络请求,从而获取网页的源代码,从而对数据进一步的分析。

函数介绍

get()

get()有3个参数,分别是:

1.headers
2.params
3.timeout
4.proxies

其中headers通过字典定义

获取数据

介绍使用requests获取数据的办法
1、获取网页的源代码

import requests as re
response = re.get(url='https://www.baidu.com')
print(response.text)

2、获取动态加载的数据
判断一个数据是通过静态加载还是动态加载,我们可以在源代码中搜素目标元素名字,如果存在,说明是提前写好的,是静态加载的;需要进一步确定则截获数据包,在其中搜素目标元素,存在则确定是动态加载的。
3、获取图片
在获取网页源代码的时候,我们调用了.text属性,因为网页源代码是文本,而图片文件应该使用.content属性来提取其二进制字节码。

爬取豆瓣Top250的电影名(分析Json数据包)

有兴趣的朋友可以一键复制代码运行试试。本代码需在环境中安装库requests、json,具体方法请自行百度,本文不赘述。
另外,如果打印出的状态码是443而不是200,需在请求头中添加cookie,具体方法在后文会讲解。

import requests
import json
url = 'https://movie.douban.com/j/chart/top_list'
params = {'type': '25', 'interval_id':'100:90', 'action': '', 'start':'0', 'limit': '166'}
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.67'
}
response = requests.get(url = url, params = params, headers = headers)
print(response.status_code)
content = response.json()
for i in content:
    print(json.dumps(i, indent = 4, ensure_ascii = False, separators = (', ', ': ')))
    break
with open('豆瓣电影动画排行榜.txt', 'w', encoding = 'utf-8-sig') as fp:
    for i in content:
        title = i['title']
        score = i['score']
        fp.write(title + '  ' + score + '\n')

Beautifulsoup

分析网页源代码最基础的方法是正则表达式,它是从字符串处理的角度来进行的

etree

同样是分析网页的源代码,我们可以选择实例化etree对象再对其分析,示例代码如下:

import requests
from lxml import etree
import time

headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.67',
'cookie': 'douban-fav-remind=1; bid=SaNprzpZygI; ll="108307"; dbcl2="232690234:6n5Tkx8rlgI"; push_noty_num=0; push_doumail_num=0; ck=MLnJ; frodotk_db="59b1a87c8709e6b70d14f975951db425"'

}

def get_html(start):
    print('正在爬取',start)
    url = f'https://movie.douban.com/top250?start={start}&filter='
    reponse = requests.get(url=url,headers=headers)
    html = etree.HTML(reponse.text) # 网页字符串转换为element对象
    movie_lis = html.xpath("//ol/li")
    for li in movie_lis:
        title = ''.join(li.xpath("div/div[@class='info']/div[@class='hd']/a/span[1]/text()"))
        description = ''.join(li.xpath("div/div[@class='info']/div[@class='bd']/p/text()")).replace('\n', '').replace(
            ' ', ''
        )
        rating = ''.join(
            li.xpath("div/div[@class='info']/div[@class='bd']/div[@class='star']/span[@class='rating_num']/text()")
        )
        comment_num = ''.join(li.xpath("div/div[@class='info']/div[@class='bd']/div[@class='star']/span[4]/text()"))
        quote = ''.join(li.xpath("div/div[@class='info']/div[@class='bd']/p[@class='quote']/span/text()"))
        cover = ''.join(li.xpath("div/div[@class='pic']/a/img/@src"))
        save_data(title,description,rating,comment_num,quote,cover)

def save_data(title,description,rating,comment_num,quote,cover) :
    with open('豆瓣TOP250.csv','a+',encoding='utf-8-sig') as f:
        movie_info = f'{title},{description},{rating},{comment_num},{quote},{cover}\n'
        f.write(movie_info)

if __name__ == '__main__':
    with open('豆瓣TOP250.csv', 'a+', encoding='utf-8-sig') as f:
        head = '名称,简介,评分,评论人数,引言,封面图\n'
        f.write(head)
    for start in range(0,250,25):
        get_html(start)
        time.sleep(2) # 休眠2秒
    print('信息录入完成')

Selenium

requests只是模拟浏览器对网页服务器发起请求,而Selenium模块是直接控制浏览器,使用该模块需要安装浏览器驱动,且浏览器上方会出现“此浏览器正在被控制”的提示字样。


附录

Python环境介绍

Anaconda是一个管理Python环境和包的工具,Pycharm是一款强大的python集成开发环境(IDE)

Anaconda

Anaconda是一个环境管理工具,可很方便对python环境和包进行管理。
我们可以把这个软件理解为一个房子,不同的虚拟环境在其中就像是房间,是完全独立的,比如说我们在其中一个虚拟环境安装了pandas包,这个操作不会对其他虚拟环境产生任何影响,这就方便了我们管理项目import包,不至于打包一个环境把一堆杂七杂八的东西包括进去。

Anaconda常用指令

  1. conda info -e 列出虚拟环境
  2. 设置虚拟环境
    • conda creat --name 环境名字 python=3.8 : 创建一个虚拟环境
    • conda activate 环境名字 :激活一个虚拟环境,往后的指令都将在这个环境中进行
    • conda deactivate :退出当前的环境
  3. 操作虚拟环境
    • conda instal 包名
    • conda update 包名
    • conda remove 包名
    • cobda list 包名
    • conda info 包名
    • conda clean : 删除无用的缓存与临时文件

退出某个环境时,PS C:\Users\DIKLE>代表着你在根目录,此时命令行即为Windows的powershell,值得注意的是在任何时候你都可以执行conda create,不必次次退出,并不会发生环境嵌套的问题。

Pycharm

这是一款强大的python集成开发环境。
在解释器设置中可以添加Anaconda的虚拟环境,不必每次新建项目都新建虚拟环境,耗时长且占空间。

标签:网页,入门,Python,爬虫,虚拟环境,conda,div,源代码,class
From: https://www.cnblogs.com/dreamload/p/17599067.html

相关文章

  • Python基础day56 Django视图层相关
    视图层三板斧问题在视图函数中写函数跟普通函数不太一样,Django中使用的是局部的request所有的视图函数不能够没有返回值,并且返回值还必须是HttpResponse对象#错误代码Theviewapp01.views.indexdidn'treturnanHttpResponseobject.ItreturnedNoneinstead.其实我......
  • 最全淘宝API接口,爬虫数据
    淘宝API接口列表接口地址item_get获得淘宝商品详情item_get_app获得淘宝app商品详情原数据item_get_pro获得淘宝商品详情高级版item_review获得淘宝商品评论item_sku获取sku详细信息item_fee获得淘宝商品快递费用item_password获得淘口令真实urlcat_get获得淘宝分类详情item_cat_ge......
  • python采集爬虫数据,API接口调用获取淘宝天猫,拼多多,1688等平台商品详情
    Python技术爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者);它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,他们沿着蜘蛛网抓取自己想要的......
  • 什么是gil锁、python的垃圾回收机制是什么样的?解释为什么计算密集型用多进程,io密集型
    目录1什么是gil锁-全局解释器锁:gil锁的作用是什么?为什么要有gil锁?2python的垃圾回收机制是什么样的?-引用计数-标记清除-分代回收3解释为什么计算密集型用多进程,io密集型用多线程计算密集型任务:I/O密集型任务:总结:1什么是gil锁-全局解释器锁:它的本质就是一个大的互斥锁,它......
  • C#语言入门指南
    欢迎来到C#语言入门指南!如果您对计算机编程和软件开发感兴趣,C#语言是一个绝佳的起点。本篇博客将带您了解C#语言的基本概念、历史以及如何设置开发环境并编写您的第一个C#程序。今天开始,我会持续更新c#入门系列的教程1.C#语言简介C#(CSharp)C#(CSharp)是由微软公司开发的一种通用、......
  • Python实现批量将ppt转换为pdf
    这是一个Python脚本,能够批量地将微软Powerpoint文件(.ppt或者.pptx)转换为pdf格式。使用说明1、将这个脚本跟PPT文件放置在同一个文件夹下。2、运行这个脚本。全部代码1234567891011121314151617181920212223import comtypes.clientimport osdef init_powerpoint():powerpoint =......
  • 医学图像领域--Transformer入门路线推荐
    本文跟那些长篇大论教你入门的文章大大不同!!你读了这些文章,对于小白来讲,原理既难又枯燥,读了等于没读,一样不会用。这里没有枯燥的理论,没有看不懂的术语,因为这些我也不懂!我能提供的,就是一个入门路线!Tina姐妙招:先实践,尝到甜头再回过头来看理论因此,本文分为两个部分,先给大家一些实践案......
  • python如何制作自己的模块
    你可以按照以下步骤制作自己的Python模块:1.创建一个新的.py文件,并定义你自己的函数或类。2.编写文档字符串docstring,说明该函数或类的作用、参数和返回值说明等。3.给你的函数或类添加恰当的注释。4.将该.py文件放在工程目录的一个新文件夹中,这个文件夹就是你的模块。5.在你......
  • python如何制作自己的模块
    你可以按照以下步骤制作自己的Python模块:1.创建一个新的.py文件,并定义你自己的函数或类。2.编写文档字符串docstring,说明该函数或类的作用、参数和返回值说明等。3.给你的函数或类添加恰当的注释。4.将该.py文件放在工程目录的一个新文件夹中,这个文件夹就是你的模块。5.在你......
  • 【Python小随笔】Pillow简单示例(图片添字,图片覆盖图片,复杂验证码...)
     简单创建添加文字到图片fromPILimportImage,ImageDraw,ImageFont,ImageFilter#导入PIL库中的相关模块importrandom#导入random库#简单的添加文字"""mode:图片模式,指定了每个像素点的颜色组织方式。常用的模式有:'1':二值图像,每个像素点只有黑和白两种颜......