最近在整理手头的书籍,想完善书籍的信息,又不想手动整理。
下面是抓取豆瓣书籍详情的一些步骤
通过 fetch( https ://book.douban.com/isbn/${isbn}) 获取详情页信息,
其中几个 meta 标签有书籍的相关信息。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<meta property="og:title" content="同意" />
<meta property="og:description" content="是的,我同意了,那年我十四岁。
他们说我不是受害者,而是同谋。
☆
推动法国性同意立法的现象级图书
授权29种语言 法语版销量超30万
让-雅克·卢梭自传奖| ELLE杂志读者大奖非虚构奖
☆
这是..." />
<meta property="og:site_name" content="豆瓣" />
<meta property="og:url" content="https://book.douban.com/subject/35947066/" />
<meta property="og:image" content="https://img9.doubanio.com/view/subject/l/public/s34390216.jpg" />
<meta property="og:type" content="book" />
<meta property="book:author" content="[法] 瓦内莎·斯普林格拉" />
<meta property="book:isbn" content="9787549637300" />通过正则处理并提取。
正则如下
1 | /<meta property="([\w:]+)" content="([\w\\u4e00-\\u9fa5\S\n]+)" \/>/g |
- 创建一个 class 来专门处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MetadataParser {
constructor(htmlCode) {
this.htmlCode = htmlCode;
}
parse() {
const regex = /<meta property="([\w:]+)" content="([\w\\u4e00-\\u9fa5\S\n]+)" \/>/g
const result = [];
let match;
while ((match = regex.exec(this.htmlCode)) !== null) {
result.push({ property: match[1], content: match[2] });
}
return result;
}
jsonStr() {
return JSON.stringify(this.parse())
}
}
4.最终代码
1 |
|