Python爬取笔趣阁小说返回的网页内容中没有小说内容

Python爬取笔趣阁小说返回的网页内容中没有小说内容,第1张

思路:

一、分析网页,网址架构

二、码代码并测试

三、下载并用手机打开观察结果

一、分析网页,网址架构

先随便点击首页上的一篇小说,土豆的--元尊,发现在首页上面有如下一些信息: 作者,状态,最新章节,最后更新时间,简介,以及下面就是每一章的章节名,点击章节名就可以跳转到具体的章节。

然后我们按F12,进入开发者模式,在作者上面点击右键--“检查”,可以发现这些信息都是比较正常地显示。

再看章节名称,发现所有的章节都在<div id="list"> 下面的 dd 里面,整整齐齐地排列好了,看到这种情形,就像点个赞,爬起来舒服。

分析完首页,点击章节名称,跳转到具体内容,发现所有的正文都在 <div id="content"> 下面,巴适的很

那么现在思路就是,先进入小说首页,爬取小说相关信息,然后遍历章节,获取章节的链接,之后就是进入具体章节,下载小说内容。

OK,开始码代码。

二、码代码并测试

导入一些基本的模块:

import requests

from bs4 import BeautifulSoup

import random

2先构建第一个函数,用于打开网页链接并获取内容。

使用的是requests 包的requestget ,获取内容之后用‘utf-8’ 进行转码。

这里我之前有个误区就是,以为所有的网站都是用 'utf-8' 进行转码的,但是实际上有些是用'gbk' 转码的,如果随便写,就会报错。

百度之后,只要在console 下面输入 ‘documentcharset’ 就可以获取网站的编码方式。

pat会更难一些。

pat考试比csp应该说更能测试算法能力,pat考试题目形式更加多样,考察的算法也更多;csp考试应该说测试的更多是编写代码的能力,题目形式比较单一。

pat是计算机程序设计能力考试,CSP即证券从业资格证。

用python进行数据分析时,查看数据,经常发生数据被自动显示成科学记数法的模式,或者多行多列数据只显示前后几行几列,中间都是省略号的情形。

import numpy as npnpset_printoptions(suppress=True, threshold=npnan)

suppress=True 取消科学记数法

threshold=npnan 完整输出(没有省略号)

display[max_categories, max_columns, max_colwidth, max_info_columns, max_info_rows, max_rows, max_seq_items, memory_usage, multi_sparse, notebook_repr_html, pprint_nest_depth, precision, show_dimensions]

详细介绍文档: pdset_option

可以在pdset_option设置displayfloat_format参数来以政策小数显示,比如下面设置显示到小数点后3位

pdset_option('displayfloat_format', lambda x: '%3f' % x)

set_option中还有其它一些控制设置,包括默认显示列数,行数等等

pdset_option('displaymax_columns',5, 'displaymax_rows', 100)

import pandas as pdpdset_option('displaymax_columns', 10000, 'displaymax_rows', 10000)

displaymax_columns 显示最大列数

displaymax_rows 显示最大行数

1、pdset_option(‘expand_frame_repr’, False)

True就是可以换行显示。设置成False的时候不允许换行

2、pdset_option(‘displaymax_rows’, 10)

pdset_option(‘displaymax_columns’, 10)

显示的最大行数和列数,如果超额就显示省略号,这个指的是多少个dataFrame的列。如果比较多又不允许换行,就会显得很乱。

3、pdset_option(‘precision’, 5)

显示小数点后的位数

4、pdset_option(‘large_repr’, A)

truncate表示截断,info表示查看信息,一般选truncate

5、pdset_option(‘max_colwidth’, 5)

列长度

6、pdset_option(‘chop_threshold’, 05)

绝对值小于05的显示00

7、pdset_option(‘colheader_justify’, ‘left’)

显示居中还是左边,

8、pdset_option(‘displaywidth’, 200)

横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200

npset_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None, formatter=None)

参数:

precision 设置浮点数的精度 (默认值:8)

threshold 设置显示的数目(超出部分省略号显示, npnan是完全输出,默认值:1000)

edgeitems 设置显示前几个,后几个 (默认值:3)

suppress 设置是否科学记数法显示 (默认值:False)

示例如下:

import numpy as npnpset_printoptions(precision=4, threshold=8, edgeitems=4, linewidth=75, suppress=True, nanstr='nan', infstr='inf')print("precision=4, 浮点数精确小数点后4位: ", nparray([123446789]))print("threshold=8, edgeitems=4, 显示8个,前4后4: ", nparange(10))npset_printoptions(formatter={'all': lambda x :'int:'+str(-x)})print("formatter, 格式化输出: ", nparange(5))

输出如下:

[上传失败(image-15f596-1587702700460)]

注意:precision自动四舍五入

详细介绍文档: npset_printoptions

pdset_option

pdset_option(pat, value)

$ python -m timeit "import re; pat = recompile(r'llo'); patsearch('hello');"

# 编译过的 re

$ python -m timeit -s "import re; pat = recompile(r'llo');" "patsearch('hello')"

1000000 loops, best of 3: 0234 usec per loop

# 字符串匹配

$ python -m timeit "'hello'index('llo')"

1000000 loops, best of 3: 0214 usec per loop

# 单纯地判断是否存在匹配

$ python -m timeit "'llo' in 'hello'"

10000000 loops, best of 3: 00495 usec per loop

######## 忽略大小的匹配

python -m timeit -s "import re; pat = recompile(r'llo', reIGNORECASE);" "patsearch('helLo')"

1000000 loops, best of 3: 0387 usec per loop

###### 没区别

$ python -m timeit -s "tomatch='llo'" "'heLlo'lower()index('llo')"

1000000 loops, best of 3: 0373 usec per loop

在 反复 查找同一字符串的情况下字符串匹配高效一点点,可以忽略不计。

如果只是 单次 匹配,或者只是查找是否有匹配的情况下regex要慢很多

使用patfindall

匹配整个字符串,多次匹配

使用patsearch

整个字符串中匹配,只匹配一次

使用patmatch

从第一个字符开始匹配,只匹配一次

但是使用search和match必须使用group()来查看

即:你可以这样

result

=

patsearch(buff)

resultgroup()

#这个就是你相匹配的东西,只匹配一次

笨办法:

with open(r"C:\Users\admin\Desktop\test\restxt", "w") as f:

    for line in open(r"C:\Users\admin\Desktop\test\datatxt"):

        n =linesplit("----")[0]

        if n[0]==n[1] and n[2]==n[3]:

            fwrite("start AABB: " + line+"\n")            

        elif n[5]==n[6] and n[7]==n[8]:

            fwrite("end AABB: " + line+"\n") 

        elif "000" in n:

            fwrite("000: " + line+"\n")

        elif "111" in n:

            fwrite("111: " + line+"\n")

        elif "222" in n:

            fwrite("222: " + line+"\n")

        elif "333" in n:

            fwrite("333: " + line+"\n")

        elif "444" in n:

            fwrite("444: " + line+"\n")

        elif "555" in n:

            fwrite("555: " + line+"\n")

        elif "666" in n:

            fwrite("666: " + line+"\n")

        elif "777" in n:

            fwrite("777: " + line+"\n")

        elif "888" in n:

            fwrite("888: " + line+"\n")

        elif "999" in n:

            fwrite("999: " + line+"\n")

2020年最新Python零基础教程(高清视频)百度网盘  

5kid 复制这段内容后打开百度网盘手机App, *** 作更方便哦   

若资源有问题欢迎追问~  

# -- coding:utf-8 --

import urllib

import re

# 使用正则表达式限定抓取的网页地址

regex = r'<a href="(+)" target="_blank"><strong class="'

pat = recompile(regex)

page = 1

url = "

info = urlliburlopen(url)read()

Sub_pages = refindall(pat,info)

# 获得网址中所有产品信息

regex = r'<td>(+)&nbsp;</td>'

pat = recompile(regex)

for page in Sub_pages:

    content = urlliburlopen(page)read()

    info = refindall(pat,content)

    print '\n'join(info)#改成这样试试

以上就是关于Python爬取笔趣阁小说返回的网页内容中没有小说内容全部的内容,包括:Python爬取笔趣阁小说返回的网页内容中没有小说内容、pat和csp哪个难、python数据分析-科学计数法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9611606.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存