江湖小白之一起学Python (一)初爬小说网

      静下心来,我犹豫了很久,还是决定把我从零学python的大体过程记录下,希望能给广大没基础想学python,或者用来做点事的老铁们带来一些便捷的方法。

      我相信想学python的老铁们恨不得立刻马上就会爬数据啊什么的,我开始也一样,但看了大部分的书和文章都是劝你从基础开始,打好基础才是为后面学习的关键,话是没错,但是对于想稍微用一下的人就感觉需要花太多精力和时间去学习,以致于大部分人还未开始即结束。淡淡的忧伤~~~~~

    我认为学一个新东西首先得保持兴趣,有兴趣才有继续下去的欲望,时不时来点小惊喜,快乐就在其中……  我们就从实战开始入手,先不管语法什么的什么的,只要先敲好代码跑起来,然后了解大概的意思就OK了,敲得多了自然就大概明白这是什么意思,有那个精力和兴趣再去深入了解语法的基础。好了,废话不多说,直接开始实战代码,那就先爬个小说网练练手吧。

额……,首先你得装好python的运行环境,本人性格比较急躁,具体的安装我就不说了,借用一下同行的安装教程:

https://blog.csdn.net/meteor_93/article/details/102618576

安装好后就开始吧:

  首先你还得安装好下面所需要用到的插件,打开CMD控制台(安装上面的软件成功了,你应该知道怎么打开了吧),来,我们愉快的执行一下下面的命令:

1、pip install requests      (爬虫常用的插件,用于访问网页)

2、pip install pyquery      (用于解析html网页内容,以前一般用美丽的BS4)

插件库准备已就绪,我们开始起飞~~~~~

我是在pyCharm里操作的,先建立一个part1.py的文件

第一行:

#coding:uft-8

(啥意思呢,就是防止中文问题,脚本报错)

接下来导入模块,下面爬去会用到的3个模块,有2个是上面安装的模块,re这个是自带的正则处理模块,不懂,没关系继续……

import requests,re
from pyquery import PyQuery as pq

虽然pyquery封装了requests请求,但我还是单独提出来,以后经常会用到requests模块,下面就拿http://www.530p.com这个小说网练练手(兄弟,对不住,如果你服务器撑不住,我改网址)

我们要抓取一个小说网,首先要找到网址,然后先抓小说目录再抓小说正文,先定义一下网址,然后这样,嗯嗯,再这样……

#网址
url='http://www.530p.com/dushi/tashenshangyoutiaolong-175288/'
#获取网址内容
response=requests.get(url=url)
#来,加上下面这句,获取网页编码防止中文乱码输出
response.encoding = response.apparent_encoding
#获取网页内容
content=response.text

随带说一句,python里#号后面跟的内容是注释,程序是不会执行的,来,输入下面命令打印一下:

print(content)

额,怎么运行脚本,在pycharm中右键点击part1.py,选择run‘part1’:

控制台得到的内容:

恭喜你,爬取到了网页的html内容,那我们怎么把自己想要的东西提取出来呢,首先要格式化一下html内容,方便解析,这是就用到了pyquery插件

#用pyquery格式化一下网页内容,下面就可以通过标签提出信息了
soup = pq(content)

你没看错,经过上面的一句话,已经格式化好了,接下来稍微有点难度,比如抓取的这个网页,我要抓取它的目录怎么抓呢,首先要分析下html标签,首先在浏览器打开http://www.530p.com/dushi/tashenshangyoutiaolong-175288/这个地址,建议你使用360极速模式或者谷歌、火狐浏览器,踏入程序员的必备浏览器,这里顺便学习怎么使用浏览器调试模式,轻轻的按下F12,就按一下,不出意外下方会出现这样的页面:

点击小箭头,移动到一个标题的上方,轻轻一点:

出现下面的内容:

这就是你要抓取的目前的所在标签位置,你有没有发现有很多clc的标签,因为他们的格式是一样的

到此,你多操作几遍,是不是感觉自己快要脱离普通人的行列了~~!以上是做爬虫的一个基本操作,要分析自己所需内容所在的标签位置,额,信息量先不要太大,我们继续,抓取所有clc的标签及内容:

#经分析我们要的内容在div标签"clc"里面,这里涉及到前端的一些东西,继续我们只要知道这是标签,相同的标签显示的外观(样式)是一样的,来走一波
clclist=soup(".clc").items()

我们怎么得到小说的标题和他对应的url地址呢,上面一句得到了所有clc内容,我们就要用for循环一下,遍历下一条一条的数据,什么for循环不懂,ok,没关系,我们继续……

#上面提取到的clclist是数组形式的,什么是数组,有兴趣自己去了解,大概意思就是把东西按顺序依次放在一个盒子里,一个盒子里装了很多同类的东西
for clc in clclist:
    # 我们要获取标签里的标题和对应的内容链接地址,先来提取下标题和对应的url地址
    # 得到标题
    title=clc.text()
    #得到标题对应的url
    url=clc('a').attr('href')
    #来,我们打印下,看结果是不是很happy,当然这里只是抓取到了小说的目录
    print(url,title)

这里的写法注意,这里有缩进,小白可能第一次不太懂,下面的内容表示在这个循环内,而且下面得对齐排列,不然就会报错 。 

来,我们打印下,看结果是不是很Happy, 恭喜你已经成功了一半。

下面就到了抓取小说正文环节了,上面我抓到了地址,我怎么去用,比如网页地址是这样的“/dushi/tashenshangyoutiaolong-175288/18015993.htm”,简单的说下,凡是这种类型的,第一个是/表示的根目录,不懂,OK,下一步,凡是这样的你只需要在前面加上域名http://www.530p.com/dushi/tashenshangyoutiaolong-175288/18015993.htm,把这个地址放到浏览器访问下,是不是看到内容了,OK,开始抓取吧,头脑灵活点的小白是不是就知道了,同样的方式去访问抓取这个页面内容,不知道,咱们就继续……

#拼接一下这个网址
detailurl = '{}{}'.format('http://www.530p.com',url)
#上面这句不然懂,简单点你可以写成detailurl ='http://www.530p.com'+url
# 同上面一样,开始获取网页内容
response = requests.get(url=detailurl)
response.encoding = response.apparent_encoding
content = response.text
#再用pyquery格式化一下网页内容
dochtml = pq(content)

来,分析一下网页标签,发现内容都在一个id="cp_content"的div标签里,到这里你会发现,上面div标签里class=“clc”,这里就涉及到一些前端html标签的知识了,简单说明就是只要是id=什么什么的就用“#”号,class=什么什么的就用“.”号,还是不太明白,OK,没关系,继续……

cp_txt=dochtml("#cp_content")

通过上面获取到了这个标签的内容,获取这个标签的文本内容就按下面写

txt=cp_txt.text()

如果是想获取包含html标签的内容就这样:

txt=cp_txt.html()
来,txt=cp_txt.text()获取到的内容用print(txt)打印看看,发现最下面有一段自带的标签setFontSize();无弹窗小说网(www.530p.com)

简单粗暴的过滤下:

txt=re.sub('setFontSize\(\);无弹窗小说网\(www.530p.com\)','',txt)

这句不太懂,怎么理解,这句意思就是把第一个单引号中的文字替换为空,第二个单引号表示要换成的内容,为什么括号要加\这个反斜杠(稍微有点用到正则的东西),OK,没关系,继续……,到此你就会循环的2000多个标题对应的正文内容。

看到这里是不是信息量稍微有点大,其实代码两三行,解释一箩筐,要彻底明白一些操作,还是得静下心来,慢慢研究,不过通过上面的操作,是不是有点感觉了

下面贴个完整的代码:

#coding:utf-8
import requests,re
from pyquery import PyQuery as pq
#虽然pyquery封装了requests请求,但我还是单独提出来,以后经常会用到requests模块
url='http://www.530p.com/dushi/tashenshangyoutiaolong-175288/'
response=requests.get(url=url)
response.encoding = response.apparent_encoding
content=response.text
#用pyquery格式化一下网页内容,下面就可以通过标签提出信息了
soup = pq(content)
clclist=soup(".clc").items()
#循环标题和链接
for clc in clclist:
    # 我们要获取标签里的标题和对应的内容链接地址,先来提取下标题
    title = clc.text()
    url=clc('a').attr('href')
    #拼接内容页网页地址
    detailurl = '{}{}'.format('http://www.530p.com',url)
    response = requests.get(url=detailurl)
    response.encoding = response.apparent_encoding
    content = response.text
    dochtml = pq(content)
    cp_txt=dochtml("#cp_content")
    # 提取到了标签里的内容,如果想保留html标签,则用cp_txt.html()
    txt=cp_txt.text()
    #来,打印看看,发现最下面有一段自带的标签setFontSize();无弹窗小说网(www.530p.com),简单粗暴的过滤下
    txt=re.sub('setFontSize\(\);无弹窗小说网\(www.530p.com\)','',txt)
    print(txt)



好了,初入江湖就到这里了,上面只是基本爬取一个网页内容的步骤,如抓取有些大型或者复杂的网址,那上面这几句还远远不够,不知道上面写的内容,小白能不能看懂,不懂没关系,我们继续~~!先不说太多了,仔细消化,有时间可以了解下requests,pyquery这些插件的参数及用法,咱们下篇再见!

关注公众号,不定期推出一些爬虫代码

如果有需要了解的和不明白的也可以加公众号留言,我会整理一些代码提供参考

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值