18537180361 发表于 2021-6-8 14:55:51

为什么输出的和我想象的不同

def spider():
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"}
    for x in range(1,2):
      url = f"http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{x}"
      response = requests.get(url,headers=headers)
      selector = etree.HTML(response.text)
      book_list=selector.xpath("//*[@class='bang_list clearfix bang_list_mode']/li")#提取出每一本书的整体信息
      for book in book_list:
            book_name = book.xpath("//li/div[@class='name']/a/@title")         #提取出每一本书的书名



            print(book_name)



spider()

我认为输出的代码应该是这样的:
'蛤蟆先生去看心理医生(畅销100万册!英国经典心理咨询入门书,知名心理学家李松蔚强烈推荐)'

'文城(余华新书,时隔8年重磅归来,《活着》之后又一精彩力作)'

'少年读史记(套装全5册)'

......................等等

18537180361 发表于 2021-6-8 19:07:00

没人吗

suchocolate 发表于 2021-6-8 21:14:12

本帖最后由 suchocolate 于 2021-6-8 22:51 编辑

import requests
from lxml import etree


def spider():
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"}
    for x in range(1, 2):
      url = f"http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{x}"
      r = requests.get(url, headers=headers)
      html = etree.HTML(r.text)
      result = html.xpath('//li/div[@class="name"]/a/@title')   # 直接取title即可,我看页面li干扰元素太多,先取li再取title反而慢。
      for book in result:
            print(book)


if __name__ == "__main__":
    spider()

18537180361 发表于 2021-6-9 08:58:29

假面的假面 发表于 2021-6-8 22:08
没用过xpath。经常用BeautifulSoup。

这应该是可以提取到你所有的书名信息了。


beautiful soup要比xpath好用一些?
页: [1]
查看完整版本: 为什么输出的和我想象的不同