小爬虫爬起点中文网收藏榜

刚接触爬虫,用爬虫爬了一个不需要登录的网站:起点中文网,爬取了它的收藏榜单,但只筛选出了小说的排行和名字还有作者姓名,原本还打算加上简介,但是简介的源代码存在问题,用同样的方法爬取出的简介的结果是一片空白,放到之后接触更深之后再思考是不是方法存在问题。
下面附上简单的代码:

import requests    #需要的库
import json
from requests.exceptions import RequestException
import re
import time
from bs4 import BeautifulSoup  #美丽汤大法好

url = 'https://www.qidian.com/rank/collect?style=1&page=1'
def get_one_page(url):
    try:          #之前没有加headers被防爬功能禁止了IP
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
        response = requests.get(url, headers=headers)
        if response.status_code == 200:          #成功状态
            return response.text
        return None
    except RequestException:
        return None

def parse_one_page(html):
    soup = BeautifulSoup(html, 'lxml')  #第二个参数解析器类型,这里用lxml
    nums=soup.find_all(attrs={'class':'book-img-box'})#序号的标签属性
    texts=soup.find_all(attrs={'data-eid':'qd_C40'})#书名...
    names=soup.find_all(attrs={'data-eid':'qd_C41'})#作者姓名...
    for (num,text,name) in zip(nums,texts,names):#学到新知识:多个参数的for循环用zip()
            print('序号:'+num.text+'\t书名:'+text.text+'\t\t'+'作者:'+name.text)

def write_to_file(content):#写入文件
    with open('result2.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')

def main(page):
    url = 'https://www.qidian.com/rank/collect?style=1&page='+str(page)#页码不同地址不同,观察发现末尾发生变化
    html = get_one_page(url)
    parse_one_page(html)

if __name__=='__main__':
    for i in range(1,11):#改变页码的地址
        main(page=i)
        time.sleep(1)#防止速度过快被禁止

下面是部分结果,还存在小缺点就是这个因为书名长度不一样,就没办法用\t来控制对齐,用格式化输出控制应该就会解决,emmmm对,原来是我太天真了,试了很多方法比如str.ljust()和format(),序号和书名可以分开对齐了但是作者老是不能单独对齐,之后编写函数对齐吧:

序号: 1   书名:一念永恒         作者:耳根
序号: 2   书名:圣墟           作者:辰东
序号: 3   书名:修真聊天群            作者:圣骑士的传说
序号: 4   书名:玄界之门         作者:忘语
序号: 5   书名:斗罗大陆III龙王传说          作者:唐家三少
序号: 6   书名:斗破苍穹         作者:天蚕土豆
序号: 7   书名:大主宰          作者:天蚕土豆
序号: 8   书名:不朽凡人         作者:鹅是老五
序号: 9   书名:大唐仙医         作者:秃笔居士
序号: 10      书名:雪鹰领主         作者:我吃西红柿
序号: 11      书名:完美世界         作者:辰东
序号: 12      书名:万界天尊         作者:血红
序号: 13      书名:琴帝           作者:唐家三少
序号: 14      书名:放开那个女巫           作者:二目
序号: 15      书名:美食供应商            作者:会做菜的猫
序号: 16      书名:牧神记          作者:宅猪
序号: 17      书名:盘龙           作者:我吃西红柿
序号: 18      书名:斗罗大陆         作者:唐家三少
序号: 19      书名:我欲封天         作者:耳根
序号: 20      书名:凡人修仙传            作者:忘语

也可以这样哈哈哈 看起来好看多了 就是一点也不实用:

    for (num,text,name) in zip(nums,texts,names):
        print("*********************")
        print('序号:'+num.text)
        print('作者:'+name.text)
        print('书名:'+text.text)
        print("*********************\n")

花里胡哨的效果:

*********************
序号: 1  
作者:耳根
书名:一念永恒
*********************

*********************
序号: 2  
作者:辰东
书名:圣墟
*********************

*********************
序号: 3  
作者:圣骑士的传说
书名:修真聊天群
*********************

*********************
序号: 4  
作者:忘语
书名:玄界之门
*********************

*********************
序号: 5  
作者:唐家三少
书名:斗罗大陆III龙王传说
*********************
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值