Python之Web Crawler

一,前言
对于软件的安装包建议直接到官网进行下载(下载破解软件的除外),这样可以避免安装一些被捆绑的插件。在这个Project中,只需安装俩个软件,一个是Python,另一个是PyCharm( Python IDE,术语上称为集成开发环境,说白就是一个有运行和调试功能的语言编辑器)

Python官网地址:https://www.python.org/
PyCharm官网地址:https://www.jetbrains.com/pycharm/

至于选择 Python 2.x 还是Python 3.x ,就要根据教程所用的进行安装,等上手之后再来比较版本之间的差异。依然值得一提的是,print 语法在Python 3.x 中有一个小小的改动:Python 2.x中的print语句被Python 3.x中的print()函数取代,意味着在Python 3.x中必须用括号将需要输出的对象括起来。

举个简单的栗子:在Python 2.x中可以输入print “Hello World”print ‘Hello World’进行打印(单引号或双引号同样生效),但在Python 3.x中则要把打印的内容括起来print( “Hello World”)print( ‘Hello World’)。

废话不多说,立马进入今天的主题。

二,环境搭建

(1)安装完Python后,打开python.exe,运行表达式 3 + 7 ,如果没报错,并有结果输出,说明Python安装且运行成功。


(2)如果是Window安装的用户,也可以在cmd命令模式下运行Python,前提是先在电脑添加运行路径。计算机—>属性—>高级系统配置—>“环境变量”对话框的“系统变量”中选取“Path”,然后单击“编辑”,如下图所示:


在变量值的最后添加“;”,并将Python所在的路径添加到分号的后面。例如,在我的电脑里,添加值如下 ;D:\python\Python3.6.0 ,点击确定完成设置。

打开cmd,输入python+回车,出现以下界面,此时已设置完成。


(3)从上面可以看出,无论是从python.exe打开,还是从cmd打开Python,编辑界面都是非常简陋的,所以可以用到Python的编辑神器--PyCharm。安装过程不在这里细说,主要看一下它的开发界面,作为一个可以运行调试的编辑器,主要由3大部分组成,1:项目组织结构 ;2:Code Editor 主界面;3:Debug调试信息。

整个页面看起来是非常简洁美观的:


与此同时,根据每位用户的使用习惯,还可以在菜单File—>Settings选项卡中进行个性化设置,如代码颜色和大小,如下图:


编译环境介绍完了,下面我们来一点干货。

三,Web Crawler

Web Crawler翻译成过来就是网络爬虫,可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。
听起来有点像Google搜索引擎吧,确实有点像,但不完全是。Google有一整套不断抓取网络信息的爬虫工具,可以发现新的内容(跟踪不断更新或添加新内容的网站),爬虫是搜索引擎中其中一个重要组成部分。
下面让我们一起来see see 爬虫是怎么抓取网站资源的。

主要代码如下:
<pre>
import requests
from bs4 import BeautifulSoup

def spider(max_pages):
page = 1
while page <= max_pages:
url = 'https://www.guazi.com/cq/buy/h' + str(page)
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, "html.parser")

    for link in soup.findAll('a', {'target': '_blank'}):
        href = "https://www.guazi.com" + link.get('href')
        title = link.string

        if title:      
            print(href)
            print(title)
            fw = open("web.txt", "a")
            fw.write(href + '\n')
            fw.write(title + '\n')
            fw.close()

    page += 1

spider(1) #running this program
</pre>

第一步:确定目标

在这里,我抓的网站是”瓜子二手车“,不得吐槽一下,国内的网页跟国外相比,排版非常乱。

分析一下我们的代码,import的作用就像是c语言中的include函数,它将需要的功能模块引入进来。
接下来定义一个spider()函数进行网页内容的抓取。
一般情况下浏览器拿到了网页原始码之后,会先解析,然后把画面显示成我们平常看见的样子。
但这边我们并不做显示,只想分析原始码内的内容,所以用Beautifulsoup来分析刚刚抓到的内容,在BeautifulSoup()的建构式第二个参数放入'html.parser'让它来帮助我们解析。

第二步:分析页面结构

在”瓜子二手车“网页单击右键,选择查看网页源代码分析:
<pre>
<a href="/zz/" target="_blank">郑州二手车</a>
<a href="/sh/" target="_blank">上海二手车</a>
<a href="/sy/" target="_blank">沈阳二手车</a>
<a href="/km/" target="_blank">昆明二手车</a>
<a href="/bj/" target="_blank">北京二手车</a>
<a href="/nn/" target="_blank">南宁二手车</a>
</pre>

我们发现,每个网页的标题信息皆放在target="_blank"的a标签里。我们这里使用到findAll()方法来操作BeautifulSoup对象,之后将网页的地址进行拼接。
<pre>
for link in soup.findAll('a', {'target': '_blank'}):
href = "https://www.guazi.com" + link.get('href')
</pre>

最后关于文件的读写操作相信大家都比较熟悉,参数"a"表示的是对文档内容的追加:
<pre>
fw = open("web.txt", "a")
fw.write(href + '\n')
fw.write(title + '\n')
fw.close()
</pre>

下面来看一下我们的运行结果(截取部分):

运行结果.png

当然运行结果也导入到我们的web.txt文档中,如果你发现文档中的格式出现乱码,不要紧张,在pycharm的底部有一个file encoding选项,将编码格式UTF-8改成gb2312即可,然后在弹出来的对话框单击reload,此时,页面就能正常显示中文字符了。

小结

这篇文章实现了最简单的爬虫机制,以及BeautifulSoup的使用,最后将结果输送入到文件中。麻雀虽小,五脏俱全,这个程序功能简单,但算是一个完整的爬虫程序。

之后,本人将继续介绍怎么在音乐,视频网站下载音乐和视频,如何将网页有用的数据抓取下来导入到数据库当中进行二次开发利用。

路漫漫其修远兮,吾将上下而求索。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,294评论 6 428
  • 打开简书,看到的第一篇文章是来自顾老师的,谈了他在简书里一年半的故事:从0粉丝到目前坐拥20万的忠实粉丝,从一个无...
    林子Lizzer阅读 270评论 0 1
  • 今天早上依旧是六点过一点起床,跑步,做运动,然后排队去吃饭, 最后一天三下乡了,昨晚上去买了小本子给小朋友们准备的...
    interested小小锐阅读 184评论 0 1
  • 鸡汤虽补,久用成毒。 你还会阅读那些被标签化的文字吗? 你是否会因为朋友圈被鸡汤文学刷屏困惑过? 没人能抉择一个载...
    俞无字阅读 372评论 5 6
  • 距离之于爱情就如同风之于火,湮灭那些弱小的,成就那些伟大的! 上面这句话是我的一位表姐告诉我的,她的专业是外语,所...
    兰十三阅读 338评论 0 2