python爬虫练习-爬取豆瓣图书top250

个人自学,完整学习请访问以下链接

学习链接: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              #计数器加一

效果

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容