Python爬虫入门——第一个爬虫实例

目录html

开发爬虫的步骤:python

实例开发与踩坑总结正则表达式

踩坑总结:ide

开发实例:函数

开发过程:学习

第一步,获取目标数据网站

第二步,分析数据加载流程编码

第三步、下载数据url

第四步、清洗数据spa

第五步、数据持久化

 

浅淡爬虫:

       此次学习爬虫,我的认为,爬虫的过程像是咱们经过手动访问网页,找到咱们所须要的数据,而后在把数据下载并保存下来。当咱们须要访问的网页过多,须要下载的数据过多时,手动逐章进行无疑是一件冗长繁琐的事情。爬虫的优点便体现了出来,它能够自动将网页上咱们所须要的信息提取并保存下来,逐个访问页面上须要访问的连接,进入,下载并保存信息。爬虫的工做流程便相似手动逐个点击访问,了解了它的工做原理,再结合代码示例就有了更深层次的认识。

 

开发爬虫的步骤:
-目标数据
    -网站
    -页面
-分析数据加载流程
    -分析目标数据所对应的url
-下载数据
-清洗,处理数据
-数据持久化
 

实例开发与踩坑总结
踩坑总结:
         IDE : Pycharm

         须要安装requests库。 解决方法: win+r 输入 cmd。在命令行输入 : pip install requests。

         导入Pycharm(!坑)。以前安装好了requests库,可是在Pycharm中依旧没法运行,报错显示没有requests库。

         解决方法:多是没有导入该库。在File - Setting - Project Interpreter 中导入requests库。以下图中所示。导入成功以后开始正常启动运行。

 

开发实例:
 此次的实例是要爬取小说内容而且保存至txt文档。

开发过程:
第一步,获取目标数据
首先咱们定义获取的网页url

url = 'https://www.xs4.cc/dushizhiwozhendewudi/'
response  = requests.get(url)
#目标小说主页源码
html = response.text
然而此时print(html)后发现以下状况

说明此网页的编码方式并不是utf-8,

咱们须要在从新定义一下网页的编码方式:


url = 'https://www.xs4.cc/dushizhiwozhendewudi/'
response  = requests.get(url)
#编码方式
response.encoding = 'gbk'
#目标小说主页源码
html = response.text
print(html)

 

再次打印后正常:

 

此时,咱们就获取了目标网页的源码。

第二步,分析数据加载流程
       类比于人工访问。人工访问时,咱们首先要点击“第一章”的连接,而后在页面上找到章节正文,把章节正文复制粘贴到要保存的txt文档。爬虫的工做步骤也是相似。在咱们获悉的html数据中,首先找到各个章节所对应的部分。点击F12 查看网页源码,而且找到对应的位置,以下图示:

找到了对应的部分,可是要怎么提取呢。注意,咱们已经经过第一步,把当前网页的html源码存入 变量html中,所以,咱们须要在html中找到对应部分并把他们提取出来。

这就要用到正则表达式,经过python re库能够很方便实现这个功能:

首先咱们来定位咱们所须要的代码,咱们所须要的章节信息是在这一部分中保存的。

  1. <dl id="booklistBox">
  2.  
    ***
  3.  
    </dl>

    这时就能够肯定,我么所须要提取的信息就在这一部分,咱们用正则表达式中提取所须要的信息

    #获取每一章节的信息
    dl = re.findall(r'id="booklistBox".*?</dl>', html, re.S)
     
    #注意:
    # re.findall(r'  ', 来源, 附加方法)
    #re.findall() 帮助咱们识别正则表达式。
    # r'' 引号内存放  查找开头, 咱们所需保存的数据, 查找的结尾。
    # 因为咱们所须要的章节url 和章节标题不一样,所以用 .*? 代替。
    #  .*? 表明的是任意内容,至关于爬虫在查找html源码时,识别 查找开头,与查找结尾,把中间的东西所有保 
    #   存起来。
    #re.S 是为了鉴别源文件中的 ‘ ’ ‘\n’ ,这些干扰有时会影响正则表达式的鉴别,加上re.S能无视其干扰

打印dl :

接着咱们把dl 变成列表,

用一样的方法,咱们再在 dl 中提取下一步须要的信息,即各章节的题目与url


#获取每一章节的信息
dl = re.findall(r'id="booklistBox".*?</dl>', html, re.S)[0]
#获取章节信息列表
chapter_info_list = re.findall(r'<a href="(.*?)" title="(.*?)">', dl)
#获取每一章节的标题
title  = re.findall(r'title="(.*?)">', dl)
 
#print(title)

打印title :

把title 变成列表。

第三步、下载数据

对于每一个章节,我么首先要提取其url 与 章节标题。再对应每一个章节分别下载其内容。

#循环每一个章节,分别去下载
for chapter_info in chapter_info_list:
    #chapter_url, chapter_title = chapter_info
    chapter_url = chapter_info[0]
    chapter_title = chapter_info[1]
    #下载章节内容
    chapter_response = requests.get(chapter_url)
    chapter_response.encoding = 'gbk'
    chapter_html = chapter_response.text
    #提取章节内容
    chapter_content = re.findall(r'id="content">(.*?)</div>', chapter_html, re.S)[0]
————————————————
打印 chapter_content :

第四步、清洗数据

咱们发现下载的数据中有不少字符,好比<br/> 、 &nsbp 等这是不可避免的状况,打印完成后,咱们就须要来清洗数据,就是把不须要的字符,用空字符代替便可。

具体须要清洗的内容须要具体分析。

清洗代码:

 

 

#清洗数据
    chapter_content = chapter_content.replace('<br/><br/>', '')
    chapter_content = chapter_content.replace('<br />', '')
    chapter_content = chapter_content.replace('&nbsp;', '')
    #print(chapter_content)

再次打印,:

清洗数据成功!

第五步、数据持久化

听起来很厉害,其实就是把数据保存下来例如保存到txt文档。

首先咱们要建立一个文件,将内容存放进去。

 

  1. #新建一个文件,保存小说内容
  2.  
    fb = open( '%s.txt' % title, 'w', encoding= 'utf-8')

利用文件存放函数,保存对应章节内容。

  1. #数据持久化
  2.  
    fb.write(chapter_title)
  3.  
    fb.write( '\n')
  4.  
    fb.write(chapter_content)
  5.  
    fb.write( '\n')

    再次运行。

    爬虫成功。

     

     

    完整代码:

    import requestsimport re url = 'https://www.xs4.cc/dushizhiwozhendewudi/'response  = requests.get(url)#编码方式response.encoding = 'gbk'#目标小说主页源码html = response.text#获取每一章节的信息dl = re.findall(r'id="booklistBox".*?</dl>', html, re.S)[0]#获取章节信息列表chapter_info_list = re.findall(r'<a href="(.*?)" title="(.*?)">', dl)#获取每一章节的标题title  = re.findall(r'title="(.*?)">', dl)[0] #print(title) #新建一个文件,保存小说内容fb = open('%s.txt' % title, 'w', encoding='utf-8')  #循环每一个章节,分别去下载for chapter_info in chapter_info_list:    #chapter_url, chapter_title = chapter_info    chapter_url = chapter_info[0]    chapter_title = chapter_info[1]    #下载章节内容    chapter_response = requests.get(chapter_url)    chapter_response.encoding = 'gbk'    chapter_html = chapter_response.text    #提取章节内容    chapter_content = re.findall(r'id="content">(.*?)</div>', chapter_html, re.S)[0]    #清洗数据    chapter_content = chapter_content.replace('<br/><br/>', '')    chapter_content = chapter_content.replace('<br />', '')    chapter_content = chapter_content.replace('&nbsp;', '')    #print(chapter_content)    #数据持久化    fb.write(chapter_title)    fb.write('\n')    fb.write(chapter_content)    fb.write('\n')#print(title)————————————————版权声明:本文为CSDN博主「辞树 LingTree」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处连接及本声明。原文连接:https://blog.csdn.net/l18339702017/article/details/103726786

相关文章
相关标签/搜索