requests-BeautifulSoup

一、requests

requests库:python的第三方包,用来做接口测试和自动化测试已经爬虫

1.安装

在控制台中的终端(Teminal)中安装

pip install requests

2.导入

import requests
二、lxml库

lxml库是用于解析HTML中的数据

1.安装

在控制台中的终端(Teminal)中安装

pip install lxml

2.导入

form lxml import etree
三、BeautifulSoup

BeautifulSoup是python中解析html非常好用的第三方库;根据响应结果解析页面,提取数据

1.安装

pip install beautifulsoup4

2.导入

form bs4 import BeautifulSoup

3.用法

BeautifulSoup(网页源码,解析器)

4.解析器

序号解析库使用方法优势劣势
1Python标准库BeautifulSoup(html,’html.parser’)Python内置标准库;执行速度快容错能力较差
2lxml HTML解析库BeautifulSoup(html,’lxml’)速度快;容错能力强需安装C语言库
3lxml XML解析库BeautifulSoup(html,[‘lxml’,’xml’])速度快;容错能力强;支持XML格式需安装C语言库
4htm5lib解析库BeautifulSoup(html,’htm5llib’)以浏览器方式解析,最好的容错性速度慢

链家二手房数据爬取

import requests
from bs4 import BeautifulSoup
import time
import random
import csv
# 创建文件
# 写入列名
file=open('./链家二手房.csv','w',encoding='utf-8')
mywrite=csv.writer(file)
data=[]

URL = 'https://cd.lianjia.com/ershoufang/rs/'
# 伪装爬虫
Headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
# 请求地址,获取响应结果
resp = requests.get(url=URL, headers=Headers)
# 判断状态码是否等于200.如果是就继续操作,如果不是则打印状态码
if resp.status_code == 200:
    # 打印网页源代码
    # print(resp.text)

    # 将数据类型转换
    soup = BeautifulSoup(resp.text, 'html.parser')
    li_list = soup.select('body>div.content>div.leftContent>ul>li')
    # print(len(li_list))

    # 遍历
    for i in li_list:
        house_href = i.select_one('li>a').attrs['href']
        # print(house_href)
        # 请求更深层次的房屋详情页链接
        house_resp = requests.get(url=house_href, headers=Headers)
        # print(house_resp.text)
        soup1 = BeautifulSoup(house_resp.text, 'html.parser')
        # 小区名
        communityName = soup1.select_one('div.communityName>a').text
        print(communityName)
        # 位置
        areaName = soup1.select_one('div.areaName>span.info').text
        print(areaName)
        # 位置补充
        supplement = soup1.select_one('div.areaName>a').text
        supplement_1 = '暂无数据' if supplement == '' else supplement
        print(supplement_1)
        # 单价
        # BeautifulSoup4使用text能够将一层标签下的所有内容取出来
        unitPrice = soup1.select_one('span.unitPriceValue').text
        print(unitPrice)
        # 总价
        totalPrice = soup1.select_one('div.price>span').text + '万'
        print(totalPrice)
        # 基本属性
        baseInfo = soup1.select('div.base li')  # 后代选择器
        # 处理后的结果
        baseInfo_list = [i.text for i in baseInfo]
        print(baseInfo_list)
        # 交易属性
        transaction = soup1.select('div.transaction li>span')
        trans_list = [i.text.strip() for i in transaction]
        print(trans_list)

        # 单行写入,多行写入
        # 将数据写入文件:文件中数据越多写入越慢
        data = [communityName, areaName, supplement_1, unitPrice, totalPrice]
        data.append(baseInfo_list)
        data.append(trans_list)
        mywrite.writerow(data)
        # 休眠--以秒为单位
        # uniform(a,b)从a,b范围内随机取浮点数
        time.sleep(random.uniform(1, 3))
        # 用代理ip--在本机和网站之间有个中间ip
        # 代理ip池:能够自动检测ip是否失效,能够自动补充池中ip的数量
        break
else:
    print(resp.status_code)
file.close()

在爬取数据的时候经常会遇到反扒机制

反扒机制

主要分为以下几种:

  1. User-Agent:将爬虫伪装成浏览器,例如豆瓣TOP250、职友集
  2. 字体反扒:将页面中重要信息使用符号进行隐藏,例如猫眼电影,瓜子二手车,大众点评,美团
  3. 动态页面:使用selenium模块–selenium是一个自动化测试模块,能够模拟人的行为
  4. 人机验证:九宫格选图片、选词、图片计算、字母数字验证码、滑动验证、短信验证
    1. 九宫格选图片–深度学习–崔庆才https://cuiqingcai.com/36060.html
    2. 选词–超级鹰
    3. 图片计算–光学文字识别
    4. 字母数字验证–easyocr、百度飞浆、百度AI开发者平台
    5. 滑块验证–selenium、pyautogui–不能直接让程序去拖,还要引入对应的物理原理
    6. 短信验证–接码平台
  5. 封IP:代理ip-极光代理IP、蘑菇代理、站大爷、芝麻代理
  6. 检测selenium:滑块验证无法托成功。例如淘宝
    1. 加入屏蔽selenium的代码
    2. 修改selenium驱动的底层代码
  7. 网页中的数据放到图片中:光学文字识别
  8. 必须登录才能使用
    1. 可以在requests中传入对应的cookie信息
    2. 在selenium中传入cookie
    3. 使用selenium操作登录的输入框、按钮
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兮知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值