(爬虫二)Python爬虫入门二

Python爬虫入门

1.认识爬虫
1.1、什么是爬虫

爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。

1.2、Python的爬虫架构
  1. 调度器:相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。
  2. URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL,实现URL管理器主要用三种方式,通过内存、数据库、缓存数据库来实现。
  3. 网页下载器:通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2(Python官方基础模块)包括需要登录、代理、和cookie,requests(第三方包)。
  4. 网页解析器:将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。
  5. 应用程序:就是从网页中提取的有用数据组成的一个应用。
2.训练爬虫

1.爬虫的类型:小爬(各种库来爬)、中爬(各种框架)、大爬(各种搜索引擎)。
2.目的:解决数据来源的问题、做行业分析、完成自动化操作、按小的来讲可以爬取自己喜欢的东西 。
3.目标类型:新闻、博客、微博、各种网站等的图片,文字,视频等。

3.开始爬虫

需要导入或者安装几个python库,如下:

import requests
import csv
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

流程:
1.我们需要获取手机数据,首先获取所有手机的网页源码,以及URL地址如下:
在这里插入图片描述
2.下面是完整代码:

# _* coding: utf-8 _*_
# _author_:zeng
#2020/8/24_15:16

import requests
import csv
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

# 使用requests库中的.get方法发送一个请求至京东电脑页面,头部修改为浏览器访问,否则默认为python
def download(url, headers, num =3):
    #打印网站
    print("下载的网址:",url)
    response = requests.get(url,headers=headers)
    print(requests.status_codes)
    try:
        if response.status_code == 200:
            return response.content

        return None
# 如果相应的状态码为:200 那么return 返回网站源码,如果访问非200则调用重试
    except RequestException as rr:
        print(rr.response)
        html = ""
        if hasattr(rr.response, 'status_code'):
            code = rr.response.status_code
            print('error code', code)
            if num > 0 and 500 <= code < 600:
                html = download(url, headers, num - 1)
            else:
                code = None
        return  html
#定义查找手机的方法
def find_Iphone(url, headers):
    #调用download函数,成功则返回网页源码赋值给r的变量
    r = download(url, headers=headers)
    #使用bs4 方法生成page对象
    page = BeautifulSoup(r,"lxml")
    #通过find_all方法找到所有关于电脑的源码赋值给的all_items
    all_items = page.find_all('li', attrs={'class':'gl-item'})

    #把获取到的内容写入Iphone.csv
    with open("D:\Pycharm\Iphone.csv", 'w', newline='',encoding='utf-8') as f:
        write = csv.writer(f)
        fields = ('ID', '价格', '名称' )
        write.writerow(fields)
        #对所有京东页面的手机源码进行循环
        for all in all_items:
            #获取手机id
            Iphone_id = all["data-sku"]
            print(f"手机ID为:{Iphone_id}")
            #获取手机价格
            Iphone_price = all.find('div', attrs={'class': 'p-price'}).find('i').text
            print(f"手机的价格为:{Iphone_price}元")
            #获取手机名字
            Iphone_name = all.find('div', attrs={'class': 'p-name p-name-type-2'}).find('em').text
            print(f"手机的名称为:{Iphone_name}")
            #定义一个集合
            row = []
            #把手机的id,价格,名字,添加到集合
            row.append(Iphone_id)
            row.append(str(Iphone_price) + "元")
            row.append(Iphone_name)
            #写入集合
            write.writerow(row)
        #关闭i/o流
        f.close()


def main():
    #设置头部文件
    headers = {
        'User-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
        "referer":"https://passport.jd.com"
    }
    #京东搜索手机的URL地址
    URL = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=0c09bef5047a4c9ba5e5c5d8ec08970a"

   #调用find_Iphone方法
    find_Iphone(URL,headers=headers)

if __name__ == '__main__':
    main()

3.最后的输出结果
在这里插入图片描述
在这里插入图片描述
4.到此就大工告成!!!新手入门,大佬勿喷。觉得有帮助的,欢迎点赞。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值