爬虫第一篇

本文详细介绍了Python爬虫框架Scrapy的安装与使用,包括XPath选择器的运用、Selenium爬取京东商品信息的示例以及Scrapy的基本架构。在Scrapy项目中,讲解了spiders、engines、pipelines、scheduler和downloader等核心组件,还展示了Scrapy的目录结构。此外,文章还涵盖了Scrapy的简单爬虫创建和运行方法。
摘要由CSDN通过智能技术生成

一、xpath的使用

1 css  xpath  通用的
2 XPath 使用路径表达式在 XML 文档中选取节点
3 lxml模块为例,讲xpath选择(selenium,scrapy---》css/xpath)
4 用法:
 /  # 从当前节点开始选择,子节点
 //  # 从当前节点开始选择,子子节点
 @选取属性a[@href="image1.html"] # 选择a标签,href属性为image1.html
 .. # 表示父节点
 /a[3] # 选当前节点下第一个a标签
 /text() # 取这个标签的文本
 /@href  # 获取href属性
 /a[contains(@class,"li")] # 类名中有li的a标签
 /a[@class='li'] # 类名等于li的a标签


二、selenium爬取京东商品信息


from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# 定义爬取函数
def get_goods(bro):
    # 滑倒屏幕底部
    bro.execute_script('scroll(0,document.body.scrollHeight)')
    li_list = bro.find_elements_by_class_name('gl-item')
    for li in li_list:
        try:
            img_url = li.find_element_by_css_selector('.p-img>a>img').get_attribute('src')
            if not img_url:
                img_url = li.find_element_by_css_selector('.p-img>a>img').get_attribute('data-lazy-img')
            img_url = 'https:' + img_url

            name = li.find_element_by_css_selector('.p-name em').text
            url = li.find_element_by_css_selector('.p-img>a').get_attribute('href')
            price = li.find_element_by_css_selector('.p-price i').text
            commit = li.find_element_by_css_selector('.p-commit a').text
            print('''
            商品名称:%s
            商品价格:%s
            商品链接:%s
            图片链接:%s
            商品评论数:%s
    
            ''' % (name, price, url, img_url, commit))
        except Exception as e:
            continue

    # 点击下一页

    next = bro.find_element_by_partial_link_text('下一页')
    next.click()
    # 再解析下一页的内容
    get_goods(bro)

bro = webdriver.Chrome(executable_path='chromedriver.exe')
try:
    bro.get('https://www.jd.com/')
    # 隐士等待
    bro.implicitly_wait(10)
    search_in = bro.find_element_by_id('key')
    search_in.send_keys('男士内衣')
    search_in.send_keys(Keys.ENTER)  # 敲击回车
    # bro.page_source--->bs4--lxml
    get_goods(bro)
except Exception as e:
    print(e)

finally:
    bro.close()

三、scrapy架构介绍和安装

1、scrapy安装

1 爬虫界的django---》好多东西用起来跟django很像
2 pip3 install scrapy(依赖)
# 若不能直接安装scrapy,按以下步骤一一安装
-win平台:
        1、pip3 install wheel 
        3、pip3 install lxml
        4、pip3 install pyopenssl(装这个装不上:更新pip,搜方案)
        5、下载并安装pywin32:https://github.com/mhammond/pywin32/releases
        6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
        7、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
        8、pip3 install scrapy

3 win平台有些模块不好装,可以下载wheel文件安装
	-pip3 install wheel 
    -http://www.lfd.uci.edu/~gohlke/pythonlibs 下载相应的wheel文件
    -pip3 install 把下载后的whl拖入即可(注意python,win版本)
            
4 scrapy总结
	-pip3 install scrapy
    -scrapy创建项目:scrapy startproject 项目名
    -django中创建app:python manage.py startapp app名字
    -scrapy创建爬虫:scrapy genspider 爬虫名 爬虫的地址

2、scrapy的架构

# 5大组件:
1 爬虫:SPIDERS
	-刚刚创建的一个个爬虫(py文件,以后主要再这写)
2 引擎EGINE
	-大总管,负责各个组件的沟通(写代码不涉及到),
    -引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件
3 pipline持久化
	-爬完数据解析完,入库(py文件,存数据库,存文件,存redis,在这写)
    -在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
4 调度器
	-调度谁先被爬取,谁后爬取(通过配置来操作)
    -用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
5 下载器
	-真正取爬取数据的(写代码也不涉及)

# 两大中间件
1 爬虫中间件,介于爬虫和引擎之间,可以写多个(一般不写)
2 下载中间件,介于下载器和引擎之间,可以写多个(写的多)

3、目录介绍

myfirstscrapy # 项目名字
    myfirstscrapy # 文件夹
        spiders   # 所有的爬虫文件都放在这个下面
            __init__.py
            chouti.py  # 爬虫1  (写代码)
            baidu.py   # 爬虫2
            cnblogs.py # 爬虫3
        settings.py # 整个项目的配置文件
        items.py    # 写一些类,对比django的models    (写一些类)
        middlewares.py # 爬虫中间件和下载中间件都写在这  (写中间件)
        pipelines.py  # 持久化,存数据,文件,都在这写(数据清洗入库)  (写代码)
    scrapy.cfg        # 上线的配置文件 
    

四、scrapy的简单使用

1 运行爬虫
	scrapy scrawl 爬虫名           打印运行日志
    scrapy crawl cnblogs --nolog   不打印日志
   
2 记住的
	-解析(def parse(self, response)-css
        -xpath
    -解析
    '''
             xpath  
             选择文本  /text()
             选择属性  /@href

             css
             选择文本  ::text
             选择属性  ::attr(href)

             # extract_first取一个
             # extract()  取所有(列表形式)

            '''
   -在解析的函数中yeild Request对象,这个地址又会去发请求
		-yield Request(url=url,callback=self.parser_detail)
   		-不写默认用yield Request(url=url,callback=self.parser)
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值