使用selenium爬取当当网图书

1.目标
利用Selenium抓取当当网图书并用正则表达式获取到得到商品的图片、名称、价格、评论人数信息。
2.开发环境
python2.7 +windows10 +pycharm
3.页面分析
如图,其中包含商品的图片、名称、价格、评论人数信息。
使用selenium爬取当当网图书
抓取入口就是当当网主页,主页链接可以通过直接构造参数访问。然后在搜索框中输入“日语”,呈现的就是第一页的搜索结果。使用selenium爬取当当网图书

在页面下方,有一个分页导航,其中既包括前6页的链接,也包括下一页的链接,同时还有一个任意页码跳转的链接,如下图所示。
使用selenium爬取当当网图书
商品的搜索结果为100页,要获取每一页的内容,只需要将页码从1到100顺序遍历即可,页码数是确定的。所以,直接输入要跳转的页码,即可跳转到页码对应的页面。

相对输入跳转页码而不直接点击“下一页”的理由是:一旦爬取过程中出现异常退出,比如到50页退出了,此时继续点击“下一页”,就无法快速切换到对应的后续页面。并且,在爬取过程中,同时需要记录当前的页码数,一旦点击“下一页”之后页面加载失败,就需要做异常检测,通过检测才能判断当前加载页面的页码数。导致运行时间增加,能效降低,所以选取输入页码跳转的方式来爬取页面。

当成功加载出某一页商品列表时,利用Selenium获取页面源代码后,再选用正则进行解析。

4.使用selenium +Firefox 打开网站输入要搜索的关键字

#coding=utf-8
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)
#直接输入的初始网址
star_url = 'http://www.dangdang.com/'
# 汉语 在输入狂中要查找的关键字
keys=('汉语').decode('utf-8')
def open_page():
    try:
        driver.get(star_url)
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#key_S')))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".button")))
        input.send_keys(keys)
        submit.click()
    except TimeoutException:
        open_page()

   首先构造一个Webdriver对象,使用Firefox浏览器,指定关键词“日语”,接着定义open_page()方法,用于自动打开网页。

使用WebDriverWait对象,可以在等待加载时,设置等待条件,同时设置最长等待时间。如设置为最长10″,在这个时间内成功匹配了等待条件,就说明页面元素成功加载,返回页面解析结果后继续向下执行。如果超过最大等待时间没有成功匹配等待条件,就直接抛出超时异常。

5.解析图书信息

然后,实现了用get_contents()方法来解析图书信息。用driver.page_source直接获取页面源代码后,用正则进行解析,如下:

def get_contents():
    try:
        html = driver.page_source
        pattern = re.compile(r'<li.*?data-original="(.*?)".*?alt="(.*?)".*?class="price_n">(.*?)</span>.*?class="level".*?_1_q">(.*?)</a>.*?</li>',re.S)
        items = re.findall(pattern,html)
        for item in items:
            img, name, price, num = item
            print img, name, price, num
    except TimeoutException:
        get_contents()
图中显示匹配了多个信息,针对各个信息进行一次遍历,用for循环将每个结果分别进行解析,每次循环把匹配信息赋值为item变量,每个item变量都是一个数组,把数组内的每个元素按顺序命名,即可获取单个商品的特定内容。

6.利用selenium 翻页,达到抓取每页图书信息的效果

def next_page(page):
    try:
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#t__cp')))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#click_get_page")))
        input.clear()
        input.send_keys(page)
        submit.click()
        get_contents()
    except TimeoutException:
        next_page(page)

关于翻页操作,指定presence_of_element_located条件,然后传入#t__cp选择器,选择器对应的是被爬取网站页面的跳转页码输入框,首先获取页码输入框,赋值为input,然后获取“确定”按钮赋值submit。先清空输入框,此时调用clear()法即可。然后,调用send_keys()方法将页码填充到输入框中,点击submit.click()即可。再执行get_contents()方法,提取图书信息。


7.运行代码
def main():
    open_page()
    get_contents()
    for page in range(2,101):
        next_page(page)

if __name__ == '__main__':
    main()

因第一页在get_content()里已经抓取了,所以range(2,101)代表从第二页依次抓取到100页。
记录 共勉!
抓取结果如下:

http://img3m0.ddimg.cn/67/26/25079440-1_b_3.jpg  日语教育与日本学研究——大学日语教育研究国际研讨会论文集(2016) ¥167.00 2730条评论
http://img3m5.ddimg.cn/67/24/25199725-1_b_3.jpg  大家的日语(第二版)初级1(初级1.学习辅导1共2册)(专供网店) ¥77.10 2条评论
http://img3m8.ddimg.cn/33/16/24163458-1_b_6.jpg  新编日语 第1册(重排本)(附一书一码) ¥37.30 2324条评论
http://img3m0.ddimg.cn/18/19/25183440-1_b_3.jpg  日本语 日语学习必备图书 ¥38.00 25条评论
http://img3m4.ddimg.cn/59/12/23715014-1_b_0.jpg  新东方 日语语法新思维(修订版) ¥30.00 2238条评论
http://img3m8.ddimg.cn/24/24/23509158-1_b_10.jpg  红宝书·10000日语单词随身带:新日本语能力考试N1-N5文字词汇高效速记 ¥31.10 10356条评论
http://img3m1.ddimg.cn/61/15/23700661-1_b_1.jpg  日语误用辞典 ¥55.70 297条评论
http://img3m4.ddimg.cn/70/17/20588704-1_b_3.jpg  日本语:大家的日语(1)(新版)(MP3版)(みんなの日本語)——日本出版社原版引进经典产品,全球畅销日语教材 ¥35.30 5224条评论
http://img3m4.ddimg.cn/56/35/23601854-1_b_0.jpg  “读报刊,听NHK提高日语听说读写能力”系列 ¥98.00 344条评论
http://img3m4.ddimg.cn/62/11/25087454-1_b_3.jpg  大家的日语(第二版)(初级)(1)(配MP3光盘1张) ¥44.60 5624条评论
http://img3m9.ddimg.cn/85/23/410259649-1_b_3.jpg  新编日语教程2(第三版)套装:教程(赠MP3光盘)+练习册(中日两国一线教学专家联合编写、适合中国学生使用的经典日语教 ¥42.00 31条评论
http://img3m8.ddimg.cn/84/22/410259648-1_b_3.jpg  新编日语教程1(第三版)套装:教程(赠MP3光盘)+练习册(中日两国一线教学专家联合编写、适合中国学生使用的经典日语教 ¥42.00 1135条评论
http://img3m6.ddimg.cn/26/34/24170876-1_b_6.jpg  旅游日语口语入门:日本旅游口语书 ¥35.70 397条评论
http://img3m8.ddimg.cn/10/11/20941678-1_b_3.jpg  日语笔译实务 2级 ¥32.60 1914条评论
http://img3m1.ddimg.cn/10/0/24198481-1_b_2.jpg  新编日语 第4册(重排本)(附一书一码) ¥37.30 849条评论
http://img3m5.ddimg.cn/47/16/22609865-1_b_1.jpg  日语口语课堂(商务篇)(全彩图文)(附光盘) ¥46.40 508条评论
http://img3m5.ddimg.cn/62/25/410259725-1_b_1.jpg  新版中日交流标准日本语初级中级高级(第二版)学习套装(含主教材、同步练习) ¥229.40 40条评论
http://img3m4.ddimg.cn/66/36/23529594-1_b_1.jpg  日语语感辞典 ¥65.70 251条评论
http://img3m7.ddimg.cn/96/15/21060267-1_b_2.jpg  日语惯用语.谚语详解 ¥45.60 831条评论
http://img3m7.ddimg.cn/6/27/23808417-1_b_1.jpg  综合日语.第一册(修订版) ¥47.80 628条评论
http://img3m1.ddimg.cn/49/17/20583931-1_b_2.jpg  别笑!我是日语学习书(日本、韩国及*地区疯狂再版70次 附赠130分钟超长日语专家朗读光盘及随身学习小册子) ¥20.90 24264条评论
http://img3m4.ddimg.cn/64/33/25225264-1_b_3.jpg  日语能力考试10000词高效速记 ¥49.70 3条评论
http://img3m8.ddimg.cn/4/34/23994238-1_b_4.jpg  标准日语手写体临摹字帖:每天写一点日文100册以上团购请致电:010-57993301 ¥17.70 5297条评论
http://img3m3.ddimg.cn/37/4/24162373-1_b_6.jpg  日语面面观 ¥52.00 25条评论
http://img3m8.ddimg.cn/94/25/23492398-1_b_6.jpg  旅游日语口语入门:大家的日本旅游口袋书 ¥26.70 4212条评论
http://img3m3.ddimg.cn/42/24/25192473-1_b_2.jpg  日语拟声拟态词研究 ¥55.80 1条评论
http://img3m0.ddimg.cn/52/35/23288020-1_b_1.jpg  日语汉字读音速查词典(13新)——日语汉字读音一查便知 ¥35.30 1537条评论
http://img3m3.ddimg.cn/61/10/25087453-1_b_3.jpg  大家的日语(第二版)(初级)(2)(配MP3光盘1张) ¥44.60 590条评论
http://img3m1.ddimg.cn/7/29/22497361-1_b_1.jpg  21世纪日语系列教材—综合日语第四册(修订版) ¥39.50 812条评论
http://img3m4.ddimg.cn/65/32/23909654-1_b_7.jpg  日语零起点自学入门:日语入门王+日语口语900句(套装2册) ¥45.30 69条评论
http://img3m5.ddimg.cn/73/22/22779775-1_b_3.jpg  新编日语教程1练习册(第三版) ¥21.10 3287条评论
http://img3m9.ddimg.cn/32/3/20833889-1_b_3.jpg  日本语:大家的日语(2)(新版)(MP3版)——日本出版社原版引进经典产品,全球畅销日语教材 ¥35.30 5957条评论
http://img3m4.ddimg.cn/84/8/23801664-1_b_1.jpg  新东方 日语词汇新思维:词源+联想记忆法 ¥30.00 1019条评论
http://img3m1.ddimg.cn/51/17/21110811-1_b_2.jpg  这样学日语最有效 ¥11.54 26531条评论
http://img3m9.ddimg.cn/35/36/25124849-1_b_2.jpg  日语商务会话商务邮件核心句型大全 ¥47.30 5条评论
http://img3m2.ddimg.cn/68/9/25180322-1_b_3.jpg  日语教育与日本学(第10辑) ¥82.70 0条评论
http://img3m1.ddimg.cn/87/8/25064511-1_b_2.jpg  零起点 标准日语手写体临摹字帖 入门必备 ¥20.50 178条评论
http://img3m1.ddimg.cn/68/19/23948861-1_b_5.jpg  日语实用会话大全集(核心单词、高频实用会话关联学习) ¥31.10 80条评论
http://img3m0.ddimg.cn/75/24/22636920-1_b_1.jpg  实战商务日语进阶话典(配光盘) ¥35.30 913条评论
http://img3m1.ddimg.cn/73/21/24248341-1_b_3.jpg  高等院校日语专业四级考试10年真题与详解(第二版.附赠MP3下载) ¥39.60 202条评论
http://img3m3.ddimg.cn/28/23/22782403-1_b_2.jpg  新编日语教程2练习册(第三版) ¥21.10 1644条评论
http://img3m9.ddimg.cn/96/1/23986509-1_b_8.jpg  日语商务邮件商务文书写作大全 ¥32.40 223条评论
http://img3m2.ddimg.cn/37/26/23527882-1_b_10.jpg  蓝宝书 1000日语句型随身带:新日本语能力考试N1-N5文法句型高效速记 ¥27.70 3628条评论
http://img3m7.ddimg.cn/10/11/24176107-1_b_3.jpg  新日语敬语脱口说(配一张MP3光盘) ¥29.70 162条评论
http://img3m3.ddimg.cn/77/3/25172213-1_b_3.jpg  新日语能力考试万词对策N1级3000 ¥36.80 11条评论
http://img3m5.ddimg.cn/21/20/25153545-1_b_3.jpg  汉日语言对比研究论丛(第8辑) ¥82.70 0条评论
http://img3m6.ddimg.cn/82/6/25113016-1_b_3.jpg  新东方 标准日语临摹字帖:基础入门篇 ¥15.70 144条评论
http://img3m7.ddimg.cn/26/16/22586777-1_b_1.jpg  新日语能力考试全真模拟试题N5解析版(附MP3) ¥32.80 1078条评论
http://img3m5.ddimg.cn/37/9/23977045-1_b_6.jpg  日语数量词大全 ¥44.60 100条评论
http://img3m8.ddimg.cn/85/29/24177568-1_b_2.jpg  日语50音图记忆卡片(附双面发音挂图1张) ¥11.30 599条评论