【Python学习】Day-15 二手房信息爬取、电影信息爬取、反爬虫与反反爬虫

1. 二手房信息爬取

由于网站限制,未做数据持久化

import requests
from bs4 import BeautifulSoup as bs
import time
import random as rd
from tqdm import tqdm

for page in tqdm(range(1,101)):
    url = f'https://cd.lianjia.com/ershoufang/pg{page}/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37'}
    rsp = requests.get(url=url, headers=headers)

    if rsp.status_code == 200:
        soup = bs(rsp.text, 'html.parser')
        li_list = soup.select('#content > div.leftContent > ul > li')

        for i in li_list:
            house_href = i.select_one('li > a').attrs['href']
            house_rsp = requests.get(url=house_href,headers=headers)
            soup1 = bs(house_rsp.text, 'html.parser')
            # 小区名
            house_name = soup1.select_one('div.communityName > a').text
            # 位置
            area_name = soup1.select_one('div.areaName > span.info').text
            # 补充
            suplement = soup1.select_one('div.areaName > a').text
            suplement_handle = '暂无数据' if suplement == '' else suplement
            # 单价
            unit_price = soup1.select_one('span.unitPriceValue').text
            # 总价
            totle_price = soup1.select_one('div.price >span').text + '万'
            # 基本信息
            base_info = soup1.select('div.base li')
            # 处理信息
            base_info_list = [i.text for i in base_info]
            # 交易属性
            deal_info = soup1.select('div.transaction li > span')

            # deal_info_list = [i.text.replace('\n', '') for i in deal_info]
            deal_info_list = [i.text.strip() for i in deal_info]

            # 休眠:sleep,以秒为单位
            # uniform(a,b)从a到b范围内随机取浮点数
            # print('----------'*10)
            time.sleep(rd.uniform(1, 3))
    else:
        print(rsp.status_code)

2. 电影信息爬取

# 导入相应的模块
import requests
from bs4 import BeautifulSoup as bs
import openpyxl

# 使用headers进行浏览器伪装
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37'
}

# 创建工作簿对象
wb = openpyxl.Workbook()
wb.create_sheet('电影Top250', 0)
# 写入标题
title = ['电影', '评分', '评分人数', '引用']
for i,t in enumerate(title):
    wb['电影Top250'].cell(1, i+1).value = t

# 迭代计数
count = 2
# 遍历10个页面
for i in range(0,251,25):
    # 字符串拼接链接
    url = 'https://movie.douban.com/top250?start=' + str(i) + '&filter='
    # 发送请求,得到结果
    rsp = requests.get(url=url, headers=headers)
    rsp.encoding = 'UTF-8'

    # 判断网页请求是否正常
    if rsp.status_code == 200:
        soup = bs(rsp.text, 'html.parser')
        # 获取列表信息
        ol_list = soup.select('#content > div > div.article > ol > li')
        # 遍历信息列表
        for x in ol_list:
            # 提取第一个标题
            title_one = x.select_one('li > div > div.info > div.hd > a > span:nth-child(1)').text
            # 提取评分
            score = x.select_one('li span.rating_num').text
            # 提取评分人数
            num_people = x.select_one('li > div > div.info > div.bd > div > span:nth-child(4)').text[:-3]
            # 提取引用短语
            q = x.select_one('li > div > div.info > div.bd > p.quote > span')
            # 判断引用短语是否为空,如果为空返回'暂无引用'
            if q is not None:
                quote = q.text
            else:
                quote = '暂无引用'
            # 将提取数据下乳xlsx文件中
            wb['电影Top250'].cell(count, 1).value = title_one
            wb['电影Top250'].cell(count, 2).value = score
            wb['电影Top250'].cell(count, 3).value = num_people
            wb['电影Top250'].cell(count, 4).value = quote
            # xlsx文件写入行数迭代
            count += 1
    else:
        # 状态码异常打印
        print(rsp.status_code)
# 保存xlsx文件
wb.save('../file/电影Top250.xlsx')

3. 爬虫与反爬虫

反爬虫的几种情况:

  1. 字体反爬:将页面中重要信息使用符号进行隐藏。例如:猫眼电影、瓜子二手车、大众点评、企查查、美团等。
  2. 动态页面:—> 使用selenium模块(自动化测试的模块),能够模拟人的行为使用浏览器。
  3. 人机验证:九宫格选图片验证、选词验证、图片+计算公式验证、字母数字验证、滑块验证、短信验证等
    • 九宫格选图片验证:深度学习。https://cuiqingcai.com/36060.html
    • 选词验证:深度学习。超级鹰
    • 图片+计算公式验证、字母数字验证:光学文字识别。easyocr、百度飞桨、百度AI开发者平台等
    • 滑块验证:selenium、pyautgui —> 引入对应的物理原理
    • 短信验证:自己的手机号、接码平台
  4. 封ip:—> 代理ip。极光代理ip、蘑菇代理、站大爷、芝麻代理等。
  5. 检测selenium:滑块验证无法成功拖动 —> 1. 加入屏蔽selenium的代码 2. 修改selenium驱动的底层代码。例如:淘宝
  6. 网页中的数据放到图片中:—> 光学文字识别
  7. 登录验证:—> 可以在requests中传入对应的cookie信息、在selenium中传入cookie、使用selenium操作登录的输入框和按钮

RPA — 机器人流程自动化(影刀、八爪鱼、壁虎、Uiot等)从selenium进行演变
不建议使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值