初学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 = '
' content = html.partition(str)[2] str1 = '
' 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('', 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站某个详情页的所有标题_第1张图片

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

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

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

最后选择了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 = ''

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站某个详情页的所有标题_第2张图片

目前暂时这样子~

你可能感兴趣的:(初学Python爬虫:爬取B站某个详情页的所有标题)