日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

使用python实现简单的爬虫

發(fā)布時(shí)間:2024/8/26 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用python实现简单的爬虫 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python爬蟲的簡(jiǎn)單實(shí)現(xiàn)

  • 開發(fā)環(huán)境的配置
    • python環(huán)境的安裝
    • 編輯器的安裝
  • 爬蟲的實(shí)現(xiàn)
    • 包的安裝
    • 簡(jiǎn)單爬蟲的初步實(shí)現(xiàn)
    • 將數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)
      -簡(jiǎn)單的數(shù)據(jù)清洗
      -數(shù)據(jù)庫(kù)的連接
      -數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)

開發(fā)環(huán)境配置

python環(huán)境的安裝

python環(huán)境使用的是3.0以上版本
為了便于安裝這里使用的是anaconda
下載鏈接是anaconda
選擇下載64位即可?

?

編輯器的安裝

這里使用pycharm作為python開發(fā)的編輯器,下載網(wǎng)址?pycharm
下載Community社區(qū)版即可?

?

在打開pycharm創(chuàng)建新項(xiàng)目的時(shí)候如下圖所示,那么就代表了環(huán)境已經(jīng)安裝好了?

?

爬蟲的實(shí)現(xiàn)

包的安裝

我們這里使用的爬蟲插件是beautifulsoup不屬于python的基礎(chǔ)庫(kù),所以我們需要另行添加插件,在pycharm添加插件也是非常簡(jiǎn)單的,只需要在file->settings->project->project interpreter添加對(duì)應(yīng)的插件即可?

?

點(diǎn)擊+號(hào)即可選擇需要的python包進(jìn)行安裝?

?

簡(jiǎn)單爬蟲的初步實(shí)現(xiàn)

接下來(lái)就要開始真正的寫爬蟲了

#首先需要引入包 from urllib.request import urlopen from bs4 import BeautifulSouphtml = urlopen("https://www.cnblogs.com/ladyzhu/p/9617567.html")#括號(hào)內(nèi)的是需要爬取的網(wǎng)址地址 bsObj = BeautifulSoup(html.read())print(bsObj.title)

?

將數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)

簡(jiǎn)單的數(shù)據(jù)清洗

前面我們已經(jīng)爬取到到了一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)的信息,但是這些信息是雜亂無(wú)章的,接下我們已爬取研招網(wǎng)的院校庫(kù)為例,爬取每個(gè)院校的校名、所在地、院校隸屬,學(xué)習(xí)一下如何進(jìn)行一個(gè)簡(jiǎn)單的數(shù)據(jù)處理與爬取。

https://yz.chsi.com.cn/sch/?start=0

我們可以看到整個(gè)界面是十分復(fù)雜的,但是我們可以進(jìn)行一個(gè)分析,我們所需要的數(shù)據(jù)僅僅是最下面的表格內(nèi)的數(shù)據(jù)

?

通過(guò)查看網(wǎng)頁(yè)源碼可以發(fā)現(xiàn),所有的院校信息確實(shí)是保存在下面的一個(gè)table之中的

<table class="ch-table"><thead><tr><th>院校名稱</th><th width="100">所在地</th><th width="150">院校隸屬</th><th width="100" class="ch-table-center">院校特性</th><th width="100" class="ch-table-center">研究生院</th><th width="100" class="ch-table-center">自劃線院校</th><th width="90">在線咨詢</th><th width="90">招生簡(jiǎn)章</th></tr></thead><tbody><tr><td><a href="/sch/schoolInfo--schId-367878.dhtml" target="_blank">北京大學(xué)</a></td><td>北京</td><td>教育部</td><td class="ch-table-center"><span class="ch-table-tag">985</span><span class="ch-table-tag">211</span></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td><a href="/zxdy/forum--type-sch,forumid-455559,method-listDefault,start-0,year-2014.dhtml"target="_blank">進(jìn)入</a></td><td class="text_center"><a href="/sch/listZszc--schId-367878,categoryId-10460768,mindex-13,start-0.dhtml" target="_blank">查詢</a></td></tr><tr><td><a href="/sch/schoolInfo--schId-367879.dhtml" target="_blank">中國(guó)人民大學(xué)</a></td><td>北京</td><td>教育部</td><td class="ch-table-center"><span class="ch-table-tag">985</span><span class="ch-table-tag">211</span></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td><a href="/zxdy/forum--type-sch,forumid-441209,method-listDefault,start-0,year-2014.dhtml"target="_blank">進(jìn)入</a></td><a href="/sch/listZszc--schId-367879,categoryId-10460770,mindex-13,start-0.dhtml" target="_blank">查詢</a></td></tr><tr><td><a href="/sch/schoolInfo--schId-367880.dhtml" target="_blank">清華大學(xué)</a></td><td>北京</td><td>教育部</td><td class="ch-table-center"><span class="ch-table-tag">985</span><span class="ch-table-tag">211</span></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td><a href="/zxdy/forum--type-sch,forumid-441314,method-listDefault,start-0,year-2014.dhtml"target="_blank">進(jìn)入</a></td><td class="text_center"><a href="/sch/listZszc--schId-367880,categoryId-10460772,mindex-13,start-0.dhtml" target="_blank">查詢</a></td></tr><tr><td><a href="/sch/schoolInfo--schId-367881.dhtml" target="_blank">北京交通大學(xué)</a></td><td>北京</td><td>教育部</td><td class="ch-table-center"><span class="ch-table-tag ch-table-tag-empty"></span><span class="ch-table-tag">211</span></td><td class="ch-table-center"><i class="iconfont ch-table-tick"></i></td><td class="ch-table-center"></td><td><a href="/zxdy/forum--type-sch,forumid-455567,method-listDefault,start-0,year-2014.dhtml"target="_blank">進(jìn)入</a></td><td class="text_center"><a href="/sch/listZszc--schId-367881,categoryId-10460774,mindex-13,start-0.dhtml" target="_blank">查詢</a></td></tr><tr><td><a href="/sch/schoolInfo--schId-367882.dhtml" target="_blank">北京工業(yè)大學(xué)</a></td><td>北京</td><td>北京市</td><td class="ch-table-center"><span class="ch-table-tag ch-table-tag-empty"></span><span class="ch-table-tag">211</span></td><td class="ch-table-center"></td><td class="ch-table-center"></td><td><a href="/zxdy/forum--type-sch,forumid-441418,method-listDefault,start-0,year-2014.dhtml"target="_blank">進(jìn)入</a></td><td class="text_center"><a href="/sch/listZszc--schId-367882,categoryId-10460776,mindex-13,start-0.dhtml" target="_blank">查詢</a></td></tr><tr><td><a href="/sch/schoolInfo--schId-367883.dhtml" target="_blank">北京航空航天大學(xué)</a></td><td>北京</td><td>工業(yè)與信息化部</td><td class="ch-table-center"><span class="ch-table-tag">985</span><span class="ch-table-tag">211</span></td></tbody> </table>

?

我們可以發(fā)現(xiàn)數(shù)據(jù)是有規(guī)律的,每個(gè)tr的首個(gè)td是學(xué)校的名稱,第二個(gè)td是院校所在地,第三個(gè)td是院校的隸屬,我們需要的信息都有了,應(yīng)該如何對(duì)這些復(fù)雜的信息進(jìn)行一個(gè)簡(jiǎn)單的清洗呢?

1 #爬取院校信息方法 2 from urllib.request import urlopen 3 import pymysql 4 from urllib.error import HTTPError,URLError 5 from bs4 import BeautifulSoup 6 import re 7 8 #爬取院校信息方法 9 def findSchoolInfo(url): 10 try: 11 html = urlopen(url) 12 except HTTPError as e: 13 return None 14 try: 15 bsObj = BeautifulSoup(html.read(),'lxml') 16 shcoolInfo = bsObj.findAll("table",{"class":"ch-table"}) 17 except AttributeError as e: 18 return None 19 return shcoolInfo 20 21 #處理信息為需要的信息 22 def handleSchoolInfo(info): 23 if info == None: 24 print("沒有院校信息") 25 else: 26 school_list = [] 27 for item in info: 28 list = item.findAll("tr") 29 for x in list: 30 school = x.findAll("td") 31 if len(school) 32 school_list.append(school[0:3]) 33 else: 34 continue 35 for item in school_list: 36 school_name = item[0].get_text().strip() 37 school_shengfen = item[1].get_text() 38 shcool_belong = item[2].get_text() 39 40 shcoolInfo = findSchoolInfo("https://yz.chsi.com.cn/sch/search.do?start=0" 41 handleSchoolInfo(shcoolInfo) 42 print("爬取完成")

?

在findSchoolInfo方法中我們初步對(duì)數(shù)據(jù)進(jìn)行了一個(gè)處理,使用了findAll來(lái)進(jìn)行了數(shù)據(jù)的首次爬取,可以看到所需要的表格已經(jīng)被爬取到了?

?

在handleSchoolInfo方法中同樣使用到了findAll("tr")來(lái)對(duì)數(shù)據(jù)進(jìn)行一個(gè)清洗,通過(guò)tr的篩選之后,table標(biāo)簽已經(jīng)沒有了?

同理我們使用findAll("td")來(lái)進(jìn)行td的篩選,同時(shí)可以發(fā)現(xiàn)一個(gè)數(shù)據(jù)是為空的,因?yàn)橥ㄟ^(guò)前面tr的篩選的首行信息里面是th而不是td的?

接下來(lái)由于只需要每個(gè)數(shù)據(jù)的前三行,所以只需要將前三個(gè)數(shù)據(jù)保存即可,然后將保存的數(shù)據(jù)進(jìn)行一個(gè)有效數(shù)據(jù)的剝離

1 school_list.append(school[0:3]) 2 for item in school_list: 3 school_name = item[0].get_text().strip() 4 school_shengfen = item[1].get_text() 5 shcool_belong = item[2].get_text()

?

但是此時(shí)爬取到的數(shù)據(jù)也僅僅是當(dāng)前頁(yè)的數(shù)據(jù),通過(guò)分析研招網(wǎng)的鏈接不難得知,每一頁(yè)之間的差距僅僅是在最后的參數(shù)不同,那么在爬蟲的URL進(jìn)行修改即可

https://yz.chsi.com.cn/sch/?start=0
https://yz.chsi.com.cn/sch/?start=20

1 index = 0 2 while index < 44: 3 shcoolInfo = findSchoolInfo("https://yz.chsi.com.cn/sch/search.do?start="+str(index*20)) 4 handleSchoolInfo(shcoolInfo) 5 index+=1

?

數(shù)據(jù)庫(kù)的連接

使用的數(shù)據(jù)庫(kù)是SQL Server 2012,首先需要的是進(jìn)行包的安裝與引入使用的是

import pyodbc

?

安裝參考包的安裝
pyodbc模塊是用于odbc數(shù)據(jù)庫(kù)(一種數(shù)據(jù)庫(kù)通用接口標(biāo)準(zhǔn))的連接,不僅限于SQL server,還包括Oracle,MySQL,Access,Excel等

連接字符串的編寫

conn = pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=數(shù)據(jù)庫(kù)的IP地址;DATABASE=需要連接的數(shù)據(jù)庫(kù)名稱;UID=用戶名;PWD=密碼')

?

連接對(duì)象的建立
在完成連接字符串之后,我們需要建立連接對(duì)象

cursor = conn.cursor()

?

數(shù)據(jù)庫(kù)連接就已經(jīng)完成了,接下來(lái)就是數(shù)據(jù)庫(kù)的基本操作了

數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)

上面我們已經(jīng)找到了需要的數(shù)據(jù)同時(shí)也建立了數(shù)據(jù)庫(kù)的連接,接下來(lái)就是將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)了

1 def insertDB(school_name,school_shengfen,shcool_belong): 2 sql = "INSERT INTO tb_school(school_name,school_shengfen,school_belong) \ 3 VALUES ('%s', '%s', '%s')" % \ 4 (school_name,school_shengfen,shcool_belong) 5 try: 6 cursor.execute(sql) 7 conn.commit() 8 print(school_shengfen+"\t"+school_name+"添加成功") 9 except: 10 print("插入出錯(cuò)") 11 conn.rollback()

?

我們可以看到數(shù)據(jù)庫(kù)內(nèi)確實(shí)已經(jīng)有數(shù)據(jù)了?

?

最后關(guān)閉數(shù)據(jù)庫(kù)的連接

conn.close()

?

參考引用:
[1]?Ryan Mitchell. Web Scraping with Python[M]. O'Reilly Media ,2015.
[2]?Python連接SQL Server入門

轉(zhuǎn)載于:https://www.cnblogs.com/ladyzhu/p/10477785.html

總結(jié)

以上是生活随笔為你收集整理的使用python实现简单的爬虫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。