21天学Python --- 打卡10:Spider爬虫(高级)

在这里插入图片描述


在这里插入图片描述

1.Selenium

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器


pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

驱动下载地址:
website: http://npm.taobao.org/mirrors/chromedriver/.

1.1无头模式

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

option = Options()  # 实例化option对象
option.add_argument("--headless")  # 给option对象添加无头参数
option.headless = True #这种方式也可以
if __name__ == '__main__':
    web = Chrome(executable_path='D:\PyProject\spider\venv\Scripts\chromedriver.exe',options=option) # 指定驱动位置,否则从python解释器目录下查找.
    web.get("https://baidu.com")
    print(web.title)

1.2模拟输入和点击

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

option = Options()  # 实例化option对象
option.add_argument("--headless")  # 给option对象添加无头参数

if __name__ == '__main__':
    web = Chrome()
    web.maximize_window()  # 浏览器窗口最大化
    web.get("https://baidu.com")
    el = web.find_element_by_id('kw')
    el.send_keys('Harris-H')
    btn = web.find_element_by_id('su')
    btn.click()
    # web.close()  # 关闭当前网页

1.3标签定位

from selenium import webdriver
from lxml import etree
import time


bro = webdriver.Chrome(executable_path='./chromedriver.exe')
#逛淘宝
bro.get('https://tb.alicdn.com/snapshot/index.html')

#标签定位
search_input = bro.find_element_by_id('q')
search_input.send_keys('IPhone')
#执行js
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(5)

#点击按钮
btn = bro.find_element_by_css_selector('.btn-search')
btn.click()

#也可以继续请求
bro.get('htts://www.baidu.com')
time.sleep(2)

bro.back()
time.sleep(2)

time.sleep(5)
bro.quit()

1.4模拟登录

from selenium.webdriver import Chrome

if __name__ == '__main__':
    web = Chrome()
    web.get('http://bkjx.wust.edu.cn/')
    username = web.find_element_by_id('userAccount')
    username.send_keys('xxxxxxx') # 这里填自己的学号
    password = web.find_element_by_id('userPassword')
    password.send_keys('xxxxxxx') # 这里填自己的密码
    btn = web.find_element_by_xpath('//*[@id="ul1"]/li[4]/button')
    btn.click()
    # do something

1.5使用代理

from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://ip地址')  # 代理IP:端口号
# ${chromedriver_path}: chromedriver驱动存放路径
driver = webdriver.Chrome(options=options)
driver.get("https://dev.kdlapi.com/testproxy")

# 获取页面内容
print(driver.page_source)

# 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出
time.sleep(3)
driver.close()

1.6滑块验证

"""
目标:滑动验证码
1.定位按钮
2.按住滑块
3.滑动按钮
"""
import time
from selenium import webdriver

if __name__ == '__main__':
    chrome_obj = webdriver.Chrome()
    chrome_obj.get('https://www.helloweba.net/demo/2017/unlock/')

    # 1.定位滑动按钮
    click_obj = chrome_obj.find_element_by_xpath('//div[@class="bar1 bar"]/div[@class="slide-to-unlock-handle"]')

    # 2.按住
    # 创建一个动作链对象,参数就是浏览器对象
    action_obj = webdriver.ActionChains(chrome_obj)

    # 点击并且按住,参数就是定位的按钮
    action_obj.click_and_hold(click_obj)

    # 得到它的宽高
    size_ = click_obj.size
    width_ = 298 - size_['width']  # 滑框的宽度 减去 滑块的 宽度 就是 向x轴移动的距离(向右)
    print(width_)
    # 3.定位滑动坐标
    action_obj.move_by_offset(298-width_, 0).perform()

    # 4.松开滑动
    action_obj.release()

    time.sleep(6)
    chrome_obj.quit()

2.Scrapy

Scrapy是一个可以爬取网站数据,为了提取结构性数据而编写的开源框架。


在Scrapy的工作流程中主要包括以下几个部分:
Scrapy Engine(框架的引擎):用于处理整个系统的数据流,触发各种事件,是整个框架的核心。
Scheduler(调度器):用于接收引擎发过来的请求,添加至队列中,在引擎再次请求时将请求返回给引擎。可以理解为从URL队列中取出一个请求地址,同时去除重复的请求地址。
Downloader(下载器):用于从网络下载Web资源。
Spiders(网络爬虫):从指定网页中爬取需要的信息。
Item Pipline(项目管道):用于处理爬取后的数据,例如数据的清洗、验证以及保存。
Downloader Middlewares(下载器中间件):位于Scrapy引擎和下载器之间,主要用于处理 引擎与下载器之间的网络请求与响应。
Spider Middlewares(爬虫中间件): 位于爬虫与引擎之间,主要用于处理爬虫的响应输入和请求输出。
Scheduler Middlewares(调度中间件):位于引擎和调度之间,主要用于处理从引擎发送到调度的请求和响应。

pip install scrapy

2.1create project

scrapy startproject scrapyDemo


在这里插入图片描述

  • spiders(文件夹):用于创建爬虫文件,编写爬虫规则。
  • __ init __文件: 初始化文件。
  • items文件: 用于数据的定义,可以寄存处理后的数据。
  • middlerwares文件: 定义爬取时的中间件,其中包括SpiderMiddleware(爬虫中间件)、DownloaderMiddleware(下载中间件)
  • pipelines文件:用于实现清洗数据、验证数据、保存数据。
  • settings文件:整个框架的配置文件,主要包含配置爬虫信息,请求头、中间件等。
  • scrapy.cfg文件:项目部署文件,其中定义了项目等配置文件路径等相关信息。
import scrapy

class QuotesSpider(scrapy.Spider):
# 定义爬虫名称
    name = 'quotes_1' 
    def start_requests(self):
        # 设置爬取目标的地址
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
    # 获取所有地址,有几个地址则发送几个请求
        for url in urls:
            # 发送请求
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 获取页数
        page = response.url.split('/')[-2]
        # 根据页数设置文名称
        filename = 'quotes-%s.html' % page
        # 以写入文件模式打开文件,如果没有该文件将创建该文件
        with open(filename, 'wb') as f:
            # 向文件中写入获取的HTML代码
            f.write(response.body)
        # 输出保存文件的名称
        self.log('Saved file %s' % filename)

scrapy crawl quotes_1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

百世经纶『一页書』

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

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

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

打赏作者

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

抵扣说明:

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

余额充值