一. 爬取豆瓣读书信息
这里只爬取了豆瓣读书信息的书名和评分;最后面补充了爬取书封面,以及将其保存的代码。
爬取方式是根据网页中所需信息对应的selector来查找。
例如: https://book.douban.com/tag/小说 页面中,爬取这本书的名字,
则先将光标悬在书名“活着”之上,然后,右键选择“检查”,就看到如下所示的部分:
然后,光标悬在这部分上面,右键选择“copy”—》“copy selector”,就复制得到该书名的selector:
#subject_list > ul > li:nth-child(1) > div.info > h2 > a
其中,nth-child(1)表示这是本页第一本书,去掉 :nth-child(1)
,可以一次爬取到这一页所有的书名。注:我是以Google为例
#coding=utf-8
import urllib.request
import lxml.etree
from cssselect import GenericTranslator, SelectorError
def loadDoubanScore(url, tag, start):
'''
爬取豆瓣读书的评分:
url: 网址
tag: 读书标签,eg: '小说'
start: 开始数,由于每一页面只有有限的书籍信息,需要翻页,第一页的start=0,第二页的start=20(这个根据第一页有多少书籍决定),以此类推
'''
tag = urllib.request.quote(tag) #将中文转化为url的形式
url = url + tag + '?start=' + str(start)+'&type=T'
request = urllib.request.Request(url=url)
request.add_header(key="user-agent", val="Mozilla/5.0") #模拟Mozilla浏览器进行爬虫
response = urllib.request.urlopen(url=request)
html = response.read().decode('utf-8')
dataList = []
try:
expressionName = GenericTranslator().css_to_xpath('#subject_list > ul > li > div.info > h2 > a') #括号中为书名的selector
expressionScore = GenericTranslator().css_to_xpath('#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums') #在这里填入从网页源码中复制的selector