个人自学,完整学习请访问以下链接
学习链接:https://study.163.com/course/courseMain.htm?courseId=1004714034
代码
# -*-coding:utf-8-*-
import requests
from lxml import etree
import time
count = 1 #计数器
#一页25本书,一共10页,循环十次。
for i in range(10):
#第一页:https://book.douban.com/top250?start=0
#第二页:https://book.douban.com/top250?start=25
#第三页:https://book.douban.com/top250?start=50
#。。。以此类推得:
url = 'https://book.douban.com/top250?start={}'.format(i*25)
data = requests.get(url).text #获取页面的text
s = etree.HTML(data) #解析data
books = s.xpath('/html/body/div[3]/div[1]/div/div[1]/div/table')
#print(scores)
for div in books:
name = div.xpath('./tr/td[2]/div[1]/a/@title')[0]
athor= div.xpath('./tr/td[2]/p[1]/text()')[0]
score = div.xpath('./tr/td[2]/div[2]/span[2]/text()')[0]
quote = div.xpath('./tr/td[2]/p[2]/span/text()')
print(count)
#有的文章没有quote部分
if len(quote)>0:
#print("title:{}\tathor:{}\nscore:{}\tquote:{}\n\n".format(name,athor,score,quote)
#直接输入上文会产生问题,加上 .encode('GBK','ignore').decode('GBk') 也就是先用gbk编码,
#忽略掉非法字符,然后再译码
print("title:{}\tathor:{}\nscore:{}\tquote:{}\n\n".format(name,athor,score,quote).encode('GBK','ignore').decode('GBk'))
else:
print("title:{}\tathor:{}\nscore:{}\n\n".format(name,athor,score))
count += 1 #计数器加一
网友评论