如果豆瓣图书中没有评分book['rating'] = item.xpath('.//span[@class="rating_nums"]/text()')[0]该如何改写
时间: 2024-03-02 10:50:45 浏览: 17
如果豆瓣图书中没有评分,你可以将评分设置为 None 或者其他默认值。你可以使用 Python 的 try-except 语句来处理这种情况,示例如下:
```
try:
book['rating'] = item.xpath('.//span[@class="rating_nums"]/text()')[0]
except IndexError:
book['rating'] = None # 或者其他默认值
```
这段代码尝试从 XPath 中获取评分值,如果出现 IndexError 错误,说明该图书没有评分,那么就将评分设置为 None 或者其他默认值。
相关问题
for li in li_list: book_tag= li.xpath("//h1/text()").get().replace("豆瓣图书标签: ","") book_name = li.xpath("./div[@class='info']/h2/a/@title").get() # 书名 book_info = li.xpath(".//div[@class='pub']/text()").get() book_nums = li.xpath(".//span[@class='rating_nums']/text()").get() book_pl = li.xpath(".//span[@class='pl']/text()").get().strip().replace("(","").replace("人评价)","")
这段代码位于类 `DouBanBook` 中的 `parse_start_url` 方法中。它使用 XPath 表达式从标签页的响应中提取图书的相关信息。
- 对于每个 `li` 元素,在其下面进行如下操作:
- 使用 `xpath` 方法选取 `h1` 元素,并使用 `get` 方法获取文本内容。然后,对该文本进行处理,去掉开头的 "豆瓣图书标签: ",得到 `book_tag`。
- 使用相对路径的 XPath 表达式选取 `div` 元素下的 `h2` 元素的 `a` 元素,并使用 `get` 方法获取 `title` 属性的值,即书名,赋值给 `book_name`。
- 使用相对路径的 XPath 表达式选取当前元素下的 `div` 元素中的 `pub` 类的文本内容,即书籍的信息,赋值给 `book_info`。
- 使用相对路径的 XPath 表达式选取当前元素下的 `span` 元素中的 `rating_nums` 类的文本内容,即书籍的评分,赋值给 `book_nums`。
- 使用相对路径的 XPath 表达式选取当前元素下的 `span` 元素中的 `pl` 类的文本内容,即书籍的评论人数,赋值给 `book_pl`。在处理前需要去除首尾空格,并替换掉括号和括号内的内容。
这段代码的作用是从标签页中提取每本图书的标签、书名、信息、评分和评论人数。然后,将这些信息存储在相应的变量中。您还有其他问题吗?
item['RatingNumber'] = "".join( trees.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()')).replace(" ", "")改为用xpath爬取豆瓣图书标签: 中国文学下所有书籍(至少爬取前10页)的豆瓣评分
好的,我可以提供代码示例来回答您的问题。
首先,您需要安装Python的requests和lxml库,可以通过以下命令进行安装:
```
pip install requests
pip install lxml
```
然后,您可以使用以下代码来爬取豆瓣图书标签中中国文学分类下所有书籍的豆瓣评分:
```python
import requests
from lxml import etree
url = 'https://book.douban.com/tag/%E4%B8%AD%E5%9B%BD%E6%96%87%E5%AD%A6?start={}&type=T'
score_list = []
for i in range(10):
start = i * 20
response = requests.get(url.format(start))
html = etree.HTML(response.text)
book_list = html.xpath('//ul[@class="subject-list"]/li')
for book in book_list:
score = book.xpath('.//span[@class="rating_nums"]/text()')
if score:
score_list.append(float(score[0]))
print(score_list)
```
解释一下上述代码:
1. 首先,我们定义了一个URL模板,其中`{}`的位置将会被替换成不同的页数。
2. 然后,我们定义了一个空列表`score_list`,用于存储所有书籍的豆瓣评分。
3. 接下来,我们使用一个循环来遍历前10页的书籍。在每个循环中,我们使用`requests`库发送GET请求,获取当前页的HTML代码。
4. 然后,我们使用`lxml`库的`etree`模块来解析HTML代码,并使用XPath表达式提取每本书的豆瓣评分。如果某本书没有评分,则跳过该书籍。
5. 最后,我们将所有评分添加到`score_list`列表中,并最终输出该列表。
希望这段代码能够回答您的问题。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![jar](https://img-home.csdnimg.cn/images/20210720083455.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)