天天看点

初学Python爬虫:爬取B站某个详情页的所有标题

初学Python爬虫:从入门到爬取B站某个详情页的所有标题

新人一个,请大佬们多多包容。

如有错误,敬请指正。

前期准备:

两个包:urllib、xlwt

命令指示符中pip install解决~

课程要用到爬虫,所以先行做个学习吧。

百度搜索“Python爬虫”,很容易就出来这个文章:

[Python]新手写爬虫全过程(已完成)

感觉不错,里面是一个分析网页代码,然后爬取的,刚好之前接触过网页制作,而且没接触过的人按F12也很方便~

最重要的是,它提供的网站真是超级容易爬。。

提供的网站

推荐看看以后继续。

我只弄了前面三个函数出来,因为后面的有一些bug,如果你是Python3,import urllib可能还不足够,改成

import urllib.request
           

就可以了。

你可能会在这个代码中遇到乱码问题,问了一下百度,改进了他的getHtml函数,代码如下:

def getHtml(url):
    #获取网页内容
    page=urllib.request.urlopen(url)
    html = page.read().decode("utf-8")
    return html
           

对的,加个decode就行了。

然后做了适当的变化,我开始手痒了,打算爬这个网站上一级的标题。

上一级的网站

代码如下:

import urllib.request


######
# 爬虫v0.1 利用urlib 和 字符串内建函数
######
def getHtml(url):
    # 获取网页内容
    page = urllib.request.urlopen(url)
    html = page.read().decode("utf-8")
    return html

def content(html):
    # 内容分割的标签
    str = '<div class="content">'
    content = html.partition(str)[2]
    str1 = '</div>'
    content = content.partition(str1)[0]
    return content # 得到网页的内容


def title(content, beg=0):
    # 匹配title
    # 思路是利用str.index()和序列的切片
    try:
        title_list = []
        while True:
            num1 = content.index('target="_blank"', beg)+16
            num2 = content.index('</a>', num1)
            title_list.append(content[num1:num2])
            beg = num2

    except ValueError:
        return title_list

content = content(getHtml("https://bh.sb/post/category/main/"))
title = title(content)
pageFile = open('wewantto.txt','w',encoding='utf-8')#以写的方式打开pageCode.txt
for i in title:
    pageFile.write(i)#写入
    pageFile.write('\n')
pageFile.close()#开了记得关
# 实现了爬的单个页面的title和img的url并存入文本


           

调整的地方在网址和content函数中str和str1,契合网站代码就行;加上了写到记事本的操作~

好的!实现了爬取

初学Python爬虫:爬取B站某个详情页的所有标题

然后就是停不下来的手痒了:毕竟还是要爬一些大家熟悉的网站最好嘛

什么?你们说淘宝?我看看。。。

要登陆验证,我不玩了,太高深啦!

最后选择了B站,两个原因:

1、不需要登陆,爬数据也很方便!

2、翻页的时候网址变化很有规律!(在最后[&page=页数]的变化)

3、最多只显示50页,循环方便做!

在其中遇到了一个瓶颈,就是出现了 ‘str’ object is not callable的报错,试验了很久,发现这个函数只能被调用一次!我佛了,求大佬解答(现在没解决)

所以就是:我不管我不管,我要实现它!

解决方法:拆函数,具体代码如下:

import urllib.request
import xlwt

#实战爬取B站某页信息,v1.0

#初始化并创建一个工作簿
book = xlwt.Workbook()
#创建一个名为sheetname的表单
sheet = book.add_sheet('结果')

str0 = 'video-contain clearfix'
str1 = '</ul>'

for urlll in range(1,11):
    url0="https://search.bilibili.com/all?keyword=%E9%BE%99%E7%8E%8B%E7%9A%84%E5%B7%A5%E4%BD%9C%EF%BC%81&from_source=banner_search&spm_id_from=333.334.b_62616e6e65725f6c696e6b.1&page="+str(urlll)
    page=urllib.request.urlopen(url0)
    getHtml = page.read().decode("utf-8")
    content = getHtml.partition(str0)[2]
    content = content.partition(str1)[0]
    title_list = []
    for m in content:
        try:
            num1 = content.index('target="_blank" title=', 0) + 23
            num2 = content.index('" class', num1)
            title_list.append(content[num1:num2])
            content=content[num2:]
        except:
            break
    kkk=20*urlll-20
    for i in title_list:
        sheet.write(kkk, 0, i)
        kkk=kkk+1



#将工作簿以bookname命名并保存
book.save('wewantto.xls')

           

注意一下要写在Excel第一格的话,行列数应该从0开始。

这里简单地做了十页的结果,看起来是不错的。

(我试验的详情页?啊最近看的一部番,随便用着)

初学Python爬虫:爬取B站某个详情页的所有标题

目前暂时这样子~