一、xpath的使用
1、css、xpath通用的
2、xpath使用路径表达式在XML文档中选择节点
3、lxml模块为例,讲xpath选择(selenium,scrapy--->css/xpath)
4、用法:
/ :从根节点开始选择,子节点
// :从当前节点开始选择,子子孙孙节点
@ :选取属性a[@href="image.html"],选择a标签,href属性为image1.html
. :表示当前节点
.. :表示父节点
/a[3] :选择当前节点下的第一个a标签
/text() :选取href属性
/@href :获取href属性
/a[contain(@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)
get_goods(bro)
except Exception as e:
print(e)
finally:
bro.close()
三、scrapy架构介绍和安装
1、安装和使用介绍
- windows安装:
1、pip3 install wheel
2、pip3 install lxml
3、pip3 install pyopenssl
4、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
5、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/
6、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
7、pip3 install scrapy
-pip3 install wheel
-http://www.lfd.uci.edu/~gohlke/pythonlibs 下载相应的wheel文件
-pip3 install 把下载后的whl拖入即可(注意python,win版本)
- django创建项目:djangoadmin startproject 项目名(pycharm中也可以直接创建)
- scrapy创建项目:scrapy startproject 项目名
- 使用pycharm打开(pycharm不支持直接创建,只能用cmd命令创建)
- django中创建app:python manage.py startapp app名称
- scrapy中创建app: scrapy genspider 爬虫名称 爬虫地址
- pip install scrapy
- scrapy startproject
- scrapy genspider 爬虫名称 爬虫地址
2、scrapy架构介绍
1、爬虫:SPIDERS
- py文件,主要逻辑在这里面写
2、引擎:EGINE
- 大总管,负责各个组件的沟通(写代码涉及不到),
- 引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件
3 持久化:ITEM PIPLINES
-爬完数据解析完,入库(py文件,存数据库,存文件,存redis,在这写)
-在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
4 调度器:SCHEDULER
-调度谁先被爬取,谁后爬取(通过配置来操作)
-用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
5 下载器:DOWNLOADER
-真正取爬取数据的(写代码也不涉及)
1 爬虫中间件,介于爬虫和引擎之间,可以写多个(一般不写)
2 下载中间件,介于下载器和引擎之间,可以写多个(写的多)
3、目录介绍
myfirstscrapy
myfirstscrapy
spiders
__init__.py
chouti.py
baidu.py
cnblogs.py
settings.py
items.py
middlewares.py
pipelines.py
scrapy.cfg
四、scrapy的简单使用
scrapy crawl 爬虫名 (打印运行日志)
scrapy crawl cnblogs --nolog (不打印日志)
- 解析:(def parse(self, response))
- css
- xpath
'''
xpath
选择文本 /text()
选择属性 /@href
css
选择文本 ::text
选择属性 ::attr(href)
# extract_first取一个
# extract() 取所有(列表形式)
'''
- yield Request(url=url, callback=self.parser_detail)
- 不写默认使用的yield Request(url=url, callback=self.parser)