爬虫基础知识与简单爬虫实现

css规则:选择器,以及一条或者多条生命。

selector{declaration1;,,,;desclarationN}

每条声明是由一个属性和一个值组成

property:value

例子:

h1{color:red;fontsize:14px}

元素选择器:直接选择文档元素

比如head,p

类选择器:

元素的class属性,比如<h1 class =”important”>

类名就是important

.important选择所有有这个类属性的元素

可以结合元素选择器,比如p.important

  

id选择器

元素的id属性,比如<h1 id=”aa”>

id就是aa

#aa用于选择id=aa的元素

可以结合元素选择器,比如,p.#aa

与类选择器的异同

id一个文档只能出现一次

id选择器不能使用单词列表

与类选择器一样,都区分大小写

  

属性选择器

选择有某个属性的元素,而不论值是什么

*[title]选择所有包含title属性的元素

a[href]选择所有带有href属性的锚元素

还可以有多个属性,比如:a[href][title],注意这里是要同时满足

限定值:a[href=”www.so.com”]

  

后代(包含)选择器

选择某元素后代的元素(层级不受限制)

选择h1元素的em元素:h1 em

子元素选择器

范围限制在子元素

选择h1元素的子元素strong:h1>strong

  

XPath语法:

路径表达式:

nodename选取此节点的错有子节点

/从根节点选取

//从匹配的当前节点选择文档中的节点,不考虑他们的位置

。选取当前节点

..选取当前节点的父节点

@选取属性

  

谓语结构

嵌在[]中用来查找某个特定节点或者包含某个指定值的节点

/bookstore/book[1] 第一个book元素

/bookstore/book[last()最后一个book元素

/bookstore/book[position()<3]选取前两个

//title[@lang]选择所拥有名为lang的属性的title元素

/boolestore/book[price>35.00] 获取大于35以上的值

  

python处理xml方法

dom把整个xml读如内存,解析为树,因此占用内存大,解析满,有点是可以任意遍历树的节点

sax流模式,边度边解析,占用内存小,解析的,缺点是需要自己处理时间

量小用dom,量大用sax

SAX方法是用格式:

import string
from xml.parsers.expat import ParserCreate

'''
如果要做sax处理
首先要定义下面三个函数,并且绑定parser的方法
'''

class DefaultSaxHandler:#创建一个SAX处理器
    def start_element(self,name,attrs):
        self.name=name
        print("element:%s,attrs:%s"%(name,str(attrs)))

    def end_element(self,name):
        print("end element:%s"%name)

    def char_data(self,text):
        if text.strip():
            print("%s 's text is %s'"%(self.name,text))


handler=DefaultSaxHandler()
parser=ParserCreate() #创建一个parser
parser.StartElementHandler=handler.start_element   #找到某一个标签
parser.EndElementHandler=handler.end_element
parser.CharacterDataHandler=handler.char_data

with open("book.xml","r") as f:
    parser.Parse(f.read())

  

Selenium简介和实战

简单实用
关键命令
find_element(s)_by_tag_name
find_element(s)_by_css_selector
find_element_by_id
find_element_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_class_name

简单配置:

安装:

在联网的情况下,在Windows命令行(cmd)输入pip install selenium即可自动安装selenium,安装完成后,输入pip show selenium可查看当前的selenium版本

二、安装三大浏览器驱动driver

     1.chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list

     2.Firefox的驱动geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/

     3.IE的驱动IEdriver 下载地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver/

三、下载解压后,将chromedriver.exe , geckodriver.exe , Iedriver.exe发到Python的安装目录,例如 D:python 。 然后再将Python的安装目录添加到系统环境变量的Path下面。

然后打开Python IDLE分别输入以下代码来启动不同的浏览器

启动谷歌浏览器

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')



启动火狐浏览器
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')


启动IE浏览器
from selenium import webdriver

browser = webdriver.Ie()
browser.get('http://www.baidu.com/')

爬取17火电商

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
import time

browser = webdriver.Firefox()
browser.set_page_load_timeout(30)
browser.get('http://www.17huo.com/search.html?sq=2&keyword=%E7%BE%8A%E6%AF%9B')
page_info = browser.find_element_by_css_selector('body > div.wrap > div.pagem.product_list_pager > div')
# print(page_info.text)
pages = int((page_info.text.split(',')[0]).split(' ')[1])
for page in range(pages):
    if page > 2:
        break
    url = 'http://www.17huo.com/?mod=search&sq=2&keyword=%E7%BE%8A%E6%AF%9B&page=' + str(page + 1)
    browser.get(url)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)   # 不然会load不完整
    goods = browser.find_element_by_css_selector('body > div.wrap > div:nth-child(2) > div.p_main > ul').find_elements_by_tag_name('li')
    print('%d页有%d件商品' % ((page + 1), len(goods)))
    for good in goods:
        try:
            title = good.find_element_by_css_selector('a:nth-child(1) > p:nth-child(2)').text
            price = good.find_element_by_css_selector('div > a > span').text
            print(title, price)
        except:
            print(good.text)

  

结果:

1页有24件商品
2017秋冬新款女装毛呢格子大 ¥90.00
7923男士中长款风衣毛妮外套
货号:7923
¥100.00
四季星座416(原xz401)
宽松中长款开衫长袖2017年秋 ¥150.00
羊毛甜美针织衫/毛衣蝙蝠袖20 ¥150.00
2017年秋季针织衫/毛衣羊毛 ¥150.00
厚中长款蝙蝠型针织衫/毛衣羊毛 ¥140.00
2017年秋季针织衫/毛衣甜美 ¥110.00
毛呢西装男秋冬季店主风韩版休闲
货号:x605
¥95.00
四季星座263(原558)
店主风秋冬季韩版呢子西装男英伦
货号:x605
¥95.00
四季星座263(原558)
时尚格子气质百搭蝙蝠型中长款厚 ¥120.00
蝙蝠型中长款厚长袖开衫2017 ¥140.00
2017秋冬新款女装韩版撞色拼 ¥85.00
秋季新品 男士毛衣纯色圆领薄款
货号:B407/M01/P30
¥25.00
电商基地B407
条纹气质百搭韩版甜美蝙蝠袖长袖 ¥135.00
毛呢西装男店主秋冬季韩版休闲西
货号:x605
¥95.00
四季星座263(原558)
蝙蝠袖甜美羊毛针织衫/毛衣20 ¥125.00
2017年秋季针织衫/毛衣羊毛 ¥140.00
中长款蝙蝠型开衫长袖2017年 ¥110.00
针织衫/毛衣羊毛甜美2017年 ¥110.00
时尚气质百搭甜美气质韩版羊毛长 ¥135.00
时尚气质百搭韩版甜美蝙蝠袖长袖 ¥150.00
蝙蝠袖甜美羊毛针织衫/毛衣20 ¥145.00
2017年秋季针织衫/毛衣羊毛 ¥125.00
甜美羊毛针织衫/毛衣蝙蝠袖长袖 ¥145.00
2页有24件商品
流苏斗篷披肩外套秋冬毛衣披风中 ¥145.00
秋冬新款喇叭袖圆领毛衣套头针织 ¥59.00
韩版宽松中长款套头毛衣女麻花高 ¥69.00
秋装新款圆领宽松套头麻花毛衣女 ¥46.00
新款毛衣女中长款连衣裙针织衫宽 ¥48.00
流苏毛衣女秋冬装2017新款套 ¥69.00
2017秋装新款韩版中长款宽松 ¥69.00
圆领宽松针织衫2017春秋新款 ¥69.00
毛衣女连衣裙秋冬套头中长款打底 ¥69.00
毛衣女套头秋季2017新款韩版 ¥59.00
中长款套头毛衣女秋冬韩版针织衫 ¥69.00
2017秋冬新款韩版中长款时尚 ¥69.00
春秋韩版气质修身高领毛衣女中长 ¥69.00
毛衣女套头秋季新款韩版纯色短款 ¥69.00
8417A-802-P175钱 ¥175.00
中长款套头毛衣女秋冬韩版针织衫 ¥69.00
MY630-P50 秋冬雪花针
货号:MY630-P50
¥50.00
四季星座229
MY632-P45超柔质感羊毛
货号:MY632-P45
¥45.00
四季星座229
MY632-P45 超柔质感羊
货号:MY632-P45
¥45.00
四季星座229
MY632-P45 超柔质感羊
货号:MY632-P45
¥45.00
四季星座229
中长款修身2017年秋季西装领 ¥610.00
四色!羊毛衫店主风 破洞毛衣
货号:A064-MY20 P65
¥65.00
电商基地A064-1(原XZ606A)
中长款长袖2017年秋季暗扣西 ¥760.00
四色!羊毛衫线衫 破洞毛衣男店
货号:A064-MY20 P65
¥65.00
电商基地A064-1(原XZ606A)
3页有24件商品
2017年秋冬季新款年轻女装短 ¥75.00
四色!羊毛衫线衫 破洞毛衣男店
货号:A064-MY20 P65
¥65.00
电商基地A064-1(原XZ606A)
2017年秋季针织衫/毛衣长袖 ¥90.00
5903-P90-B215 2
货号:5903-P90-B215
¥90.00
电商基地B215
西装领甜美暗扣2017年秋季长 ¥635.00
四色!羊毛衫店主风线衫 破洞毛
货号:A064-MY20 P65
¥65.00
电商基地A064-1(原XZ606A)
针织衫/毛衣无袖套头中长款V领 ¥75.00
2017新款秋冬季中长款纯色针 ¥75.00
2017秋冬新款青年男士圆领毛
货号:D286
¥55.00
电商基地A418
长袖2017年秋季修身系带甜美 ¥610.00
中长款直筒套头长袖2017年秋 ¥105.00
5903-P90-B215 2
货号:5903-P90-B215
¥90.00
电商基地B215
2017年秋冬季新款年轻女装中 ¥110.00
2017年秋冬季新款年轻女装流 ¥90.00
2017新款秋冬季中长款纯色袖 ¥75.00
青少年秋季毛衣男学生款圆领毛线
货号:D288
¥65.00
电商基地A418
针织衫/毛衣2017年秋季蝙蝠 ¥68.00
套头中长款无袖V领甜美纯色针织 ¥75.00
2017新款秋冬季中长款纯色针 ¥65.00
毛呢外套西装领单排扣2017年 ¥115.00
5903-P90-B215 2
货号:5903-P90-B215
¥90.00
电商基地B215
春秋款潮流男士毛衣秋冬季圆领学
货号:D288
¥65.00
电商基地A418
大咖 电商A088-M1710
货号:电商A088-M17102-
¥45.00
电商基地A088
2017年秋冬季新款年轻女装纯 ¥80.00

  

原文地址:https://www.cnblogs.com/pyrene/p/7503076.html