调试模式里面的title可以获取到所有的值,但是程序执行的时候只获取下标为0的值,并且遍历了30遍

来源:2-10 爬取1号店的数据

qq_任先生_2

2019-04-26

div_list = selector.xpath('//div/div[@class="itemBox"]')
    print len(div_list)
    '''遍历取出价格,标题,出版处'''
    for li in div_list:
        '''标题'''
        title = li.xpath('//p[@class="proName clearfix"]/a/@title')
        '''价格'''
        price = li.xpath('//p[@class="proPrice"]//@yhdprice')
        print title[0]
        print price[0]
        print "------------------------------------"

30
不一样的饮品:茶饮调酒咖啡蔬果汁 花祥育 9787518418664 中国轻工业出版社
32.4

不一样的饮品:茶饮调酒咖啡蔬果汁 花祥育 9787518418664 中国轻工业出版社
32.4

不一样的饮品:茶饮调酒咖啡蔬果汁 花祥育 9787518418664 中国轻工业出版社
32.4

不一样的饮品:茶饮调酒咖啡蔬果汁 花祥育 9787518418664 中国轻工业出版社
32.4

不一样的饮品:茶饮调酒咖啡蔬果汁 花祥育 9787518418664 中国轻工业出版社
32.4

图片描述

写回答

3回答

David璐_senior_DBA

2019-04-27

# author: David
# -*- coding:utf-8 -*-

import requests
from lxml import html

def spider(isbn, book_list=[]):
    """ 爬取1号店的图书信息 """
    url = 'https://search.yhd.com/c0-0/k{0}/'.format(isbn)

    # 获取 html 源码
    html_doc = requests.get(url).text

    # 获取 xpath 对象
    selector = html.fromstring(html_doc)

    # 找到书籍列表
    ul_list = selector.xpath('//div[@id="itemSearchList"]/div')
    print(len(ul_list))

    # 解析内容
    for li in ul_list:
        
        # 获取书名
        title1 = li.xpath('div/p/a[@class="mainTitle"]/text()')[1].strip()
        if not title1:
            title2 = li.xpath('div//p/a[@pmid="0"]/text()')[1].strip()
            title = title2
        else:
            title = title1
        print("商品标题:", title)

        # 获取链接
        link1 = li.xpath('div/p/a[@class="mainTitle"]/@href')[0].replace('//', 'http://')
        if not link1:
            link2 = li.xpath('div//p/a[@pmid="0"]/@href')[0].replace('//', 'http://')
            link = link2
        else:
            link = link1
        print("商品链接:", link)

        # 获取价格
        price = li.xpath('div/p/em[@class="num"]/text()')[1].strip()
        print("商品价格:", price[1].strip())

        # 获取店铺
        store = li.xpath('div/p/a/span[@class="shop_text"]/text()')[0]
        print(" 店铺名称:", store[0])

        # 我是分割线
        print('--------------------------')


if __name__ == '__main__':
    isbn = 9787115478818
    spider(isbn)


0
1
qq_任先生_2
非常感谢!
2019-04-29
共1条回复

慕粉3543411

2019-05-30

请问你的问题解决了吗?我也使用了相同标签

0
0

David璐_senior_DBA

2019-04-27

标签选的不对

0
0

手把手教你把Python应用到实际开发 不再空谈语法

学会项目开发思路,掌握Python高阶用法。

1341 学习 · 244 问题

查看课程