爬虫入门一

为什么不直接使用属性设置元素?
核心思想和函数有些类似,通过id、class等标签达到快速批量修改的目的,而不需要逐个进行修改。

CSS选择器

1.元素选择器,如p head。

2.类选择器,如<h1 class = "important">,可使用.important选择类为important的所有元素。也可结合元素选择器,比如p.important。(泪点,使用的最多的选择器)

3.ID选择器(#来选择),ID是互不相同的。ID选择器可结合元素选择器。

4.属性选择器。如*[title]、a[href]、a[href][title]、a[href="www.baidu.com"]

5.后代选择器(子元素选择器是特殊的后代选择器,层级只能差1),主要表示的是层级关系。

XPath

XPath和CSS选择器相比的话,可以处理更加复杂的层级关系:不仅可以处理后代关系,而且可以处理同胞、先辈等关系。
XPath默认是从根节点开始操作的。

nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

import requests
from lxml import etree

content = requests.get(r'http://ip138.com/post/').content.decode('gb2312')
html = etree.HTML(content)
root = html.xpath(r'//*[@id="newAlexa"]/table//a')
for single in root:
    print single.get('href'), single.text #get表示获取某个属性

谓语

嵌在[]中用来查找某个特定节点或包含某个指定值得节点。
/datamap/data[1] 第一个book元素
/datamap/data[last()] 最后一个book元素
/datamap/data[position()<3] 选择前2个
//title[@lang] 选择所拥有有名为lang的属性的title元素
/datamap/data[price>35.00]

Json

Json = JavaScript Object Notation
类似XML,但是比 XML 更小、更快,更易解析。
参考例子sample.json
使用json库处理json,编码与解码。

encoded = json.dumps(dict) #对字典结构使用dumps
decoded = json.loads(encoded)

解析XML

DOM 把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。
SAX 流模式,边读边解析,占用内存小,解析快,缺点是需要自己处理事件。

DOM和SAX的差别有些像是Py2中range和xrange的差别。

from xml.dom.minidom import parse

doc = parse("books.xml")
root = doc.documentElement //对应的是root
books = root.getElementsByTagName('book')
for book in books:
    titles = book.getElementsByTagName('title')
    print(titles[0].childNodes[0].nodeValue)
  

正则表达式入门

import re
m = re.match(r'(\d{3})-\d{3,8}$', '010-23128456')

print m.groups()
print m.group(0)  #匹配到的整个字符串

匹配时分秒

import re
s = "20:12:59"
m = re.match(r'^([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9])$', s)

分割字符串

p = re.compile('\d+') 
p.split('1234bbbbaaa22')

selenium

1.关键函数
find_elements_by_xpath
find_element(s)_by_tag_name
find_element(s)_by_css_selector
2.注意事项
1.要将chromedriver加入到系统变量(PATH)中。
2.在xpath中,class名称中间可能加空格。
3.find_elements_by_xpath得到list。

import time
from selenium import webdriver
import re

browser = webdriver.Chrome()
browser.set_page_load_timeout(30)

browser.get('http://www.17huo.com/newsearch/?k=%E5%A4%A7%E8%A1%A3')
page_info = browser.find_elements_by_xpath(r'/html/body/div[6]/div[2]/div[3]/div')
page_info = page_info[0].text

m = re.search(r'(\d+)', page_info)
page_number = (int)(m.groups()[0])

for i in range(page_number):
    if i>3:
        break
    
    
    url = r'http://www.17huo.com/newsearch/?k=%E5%A4%A7%E8%A1%A3&page=' + (str)(i)
    browser.get(url)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)   # 不然会load不完整
    
    goods = browser.find_element_by_xpath(r'/html/body/div[6]/div[2]/div[2]').find_elements_by_xpath(r'.//div[@class="book-item-mid clearfix"]')
    print ("disp the {}th page,there are {} number of goods".format((i+1), len(goods)))
    
    for good in goods:
        try:
            price = good.find_element_by_xpath(r'.//span').text
            print price
            name = good.find_element_by_xpath(r'.//div[@class="book-item-title"]').text
            print name
            size = good.find_element_by_xpath(r'.//div[@class="book-item-flag"]').text
            print size
        except Exeception as e:
            print e
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容