前情概要
感觉以前写爬虫有点依赖github上的代码,和网上的教程,这次打算从头开始写一个爬虫,不用太难但是一定要都是自己写的,所以打算拿豆瓣开始练习。
源代码
https://github.com/Kratosssss/yt_learnning/blob/master/spyder/%E8%B1%86%E7%93%A3%E5%9B%BE%E4%B9%A6250.py
开始
提前构思好自己需要的信息类型
book{
book_name, 书名
(?) book_originalname 由于一部分书在网页上没有这个标签 所以放弃了
book_author, 作者
book_ score, 得分
book_quote ,一句箴言
}
选择 豆瓣图书 Top 250 页面
url = https://book.douban.com/top250?start=0
发现start用来控制页面信息,所以设一个循环就能得到所有页面
然后首先是添加头部
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
使用beautilfulsoup库来得到需要的信息
我使用的是css选择器,因为自己本身前端了解多一点,发现
book_names = soup.select(".pl2 a")
for book_name in book_names:
1 book_name = book_name.get_text()
2 book_name = book_name['title']
两种方式都可以得到名字但是前者会有很多空格和换行所以选择第二种
依次得到所有元素后保存至本地文件中
for book_name,book_author,book_score,book_quote in zip(book_names,book_authors,book_scores,book_quotes):
book_name = '书名:' + str(book_name['title']) + '\n'
book_author = '作者:' + str(book_author.get_text().split("/")[0]) + '\n'
book_score = '评分:' + str(book_score.get_text()) + '\n'
book_quote = '一句话:' + str(book_quote.get_text()) + '\n'
data = book_name + book_author +book_score +book_quote
# 保存数据
f.writelines(data + '=======================' + '\n')