学习是我快乐 第十五天

Day 015

一、爬虫

1.请求网页,获取响应结果

  • 使用requests ,请求地址,获取响应结果。

2.解释网页,提取数据

  • 根据前端的语法或者正则表达式提取数据。

3.数据持久化

  • 将数据写入文件进行保存。

二、反爬机制和反反爬

1.User-Agent:将爬虫伪装成浏览器。例如:某瓣电影、某友集。

2.文字反爬:将页面中重要信息使用符号进行隐藏。例如:某眼电影、某子二手车、某众点评、某查查、某团等。

3.动态页面:使用selenium模块(自动化测试的模块),能够模拟人的行为使用浏览器。

4.人机验证:九宫格选图片、选成语(词语)、图片加计算公式、字母数字验证码、滑块验证码、短信验证等。

  • 九宫格选择图片 —> 深度学习。https://cuiqingcai.com/36060.html。
  • 选成语或者词语 —> 深度学习。超级鹰。
  • 图片加计算公式、字母数字验证码 —> 光学文字识别(OCR):easyocr、百度飞桨、百度AI开发。者平台等。
  • 滑块验证:selenium、pyautgui—> 引入对应的物理原理。
  • 短信验证:等待、解码平台。

5.封IP:代理IP:某光代理IP、某菇代理、莫大爷、某麻代理等。

6.检测selenium:滑块验证无法拖成功,例如:某宝---->

a.加入屏蔽selenium的代码。
b.修该selenium驱动的底层代码。

7.网页中的数据放在图片中:光学文字识别。

8.登陆使用:淘宝可以在requests中传入cookie信息。或者在selenium中传入cookie。或者使用selenium操作登陆的输入框、按钮

补充 : RPA —> 机器人流程自动化(影刀、八爪鱼、壁虎等)—> 从selenium进行的演变

三、BeautifulSoup4

1.BeautifulSoup4 - 根据响应结果解析页面、提取数据

  • BeautifulSoup(网页源码,解析器) --> 将字符串类型的源代码转换为bs4类型学·
  • bs4模块提供了一系列提取数据的方法,这些方法的操作对象的bs4类型的数据。
    +select:根据CSS选择器(标签、class、id等)定位数据,
  • 得到的是符合这个选择器的所有结果(整体是列表,列表中每个元素是一个bs4类型的数据)
  • select_one:根据CSS选择器(标签、class、id等)定位数据,
  • 得到的是符合这个选择器的一个结果(是一个bs4类型数据)
  • text:从bs4类型数据中提取标签内的内容,结果为str
  • attrs:从bs4类型数据中提取标签内容属性值,结果为str

2.headers = {}

  • headers是一个字典:{key:value}
  • headers是给爬虫提供伪装的
  • User-Agent --> 将爬虫伪装成浏览器
  • User-Agent获取方法

3.对比页面数据内容是否一致

+网页:分为静态页面和动态页面

  • 静态页面:内容的写死的,除非人为的进行内容修改,否则这个页面的内容是一成不变的。
  • 动态页面:内容不是写死的,使用某种特殊的技术(JavaScript)使数据通过某种方式显示在页面中。
  • requests得到的结果是静态页面的结果

练习-试对某家二手房进行数据爬取

import requests
from bs4 import BeautifulSoup
import time
import random
from tqdm import tqdm

for page in tqdm(range(1, 101)):
    print(f'第{page}页')
    URL = f'https://cd.某家.com/ershoufang/pg{page}/'
    # 伪装爬虫
    Headers = {
        'User-Agent': '此处输入自己的信息即可'
    }

    # 请求地址,获取响应结果
    response = requests.get(url=URL, headers=Headers)
    if response.status_code == 200:
        # print(response.text)
        soup = BeautifulSoup(response.text, 'html.parser')
        li_list = soup.select('body > div.content > div.leftContent> ui > li')
        print(len(li_list))
        for i in li_list:
            house_href = i.select_one('li>a ').attrs['href']
            print(house_href)
            # 请求更深层次的房屋详情页链接
            house_response = requests.get(url=house_href,headers=Headers)
            print(house_response.text)
            soup1 = BeautifulSoup(house_response.text,'html.parser')
            # 小区名字
            house_name = soup1.select_one('div.communityName > a ').text
            print(house_name)
            # 位置
            areaName = soup1.select_one('div.areaName > span.into').text
            # 补充
            supplement = soup1.select_one('div.areaName > a').text
            # print(supplement,type(supplement),len(supplement))
            supplement_1 = '暂无数据' if supplement == ''else supplement
            print(supplement_1)
            # 单价
            # BeautifulSoup4能够将一层标签下的所有内容取出来。
            unitPrice = soup1.select_one('span.unitPriceValue').text
            print(unitPrice)
            # 总价
            totalPrice = soup1.select_one('div.price > span').text + '万'
            print(totalPrice)
            # 基本属性
            baseInto = soup1.select('div.base li')
            print(baseInto)
            # 处理后结过
            baseInto_In_list = [i.text for i in baseInto]
            # 交易属性
            changeInto = soup1.select('div.transaction li > span')
            print(changeInto)
            # changeInto_list = [i.text.replace('\n','')for i in changeInto]
            changeInto_list = [i.text.strip() for i in changeInto]
            print(changeInto)

            # 可单行写入 可多行写入


            # 休眠--->以秒为单位
            # uniform(a,b)从范围内随机取浮点数
            time.sleep(random.uniform(1,3))
            # 使用代理IP, ----> 代理IP池(自动检测IP是否失效,能够即使补充池中的数量)
    else:
        print(response.status_code)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值