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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

使用python实现简单的爬虫

發布時間:2024/8/26 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用python实现简单的爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python爬蟲的簡單實現

  • 開發環境的配置
    • python環境的安裝
    • 編輯器的安裝
  • 爬蟲的實現
    • 包的安裝
    • 簡單爬蟲的初步實現
    • 將數據寫入到數據庫
      -簡單的數據清洗
      -數據庫的連接
      -數據寫入到數據庫

開發環境配置

python環境的安裝

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

?

編輯器的安裝

這里使用pycharm作為python開發的編輯器,下載網址?pycharm
下載Community社區版即可?

?

在打開pycharm創建新項目的時候如下圖所示,那么就代表了環境已經安裝好了?

?

爬蟲的實現

包的安裝

我們這里使用的爬蟲插件是beautifulsoup不屬于python的基礎庫,所以我們需要另行添加插件,在pycharm添加插件也是非常簡單的,只需要在file->settings->project->project interpreter添加對應的插件即可?

?

點擊+號即可選擇需要的python包進行安裝?

?

簡單爬蟲的初步實現

接下來就要開始真正的寫爬蟲了

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

?

將數據寫入到數據庫

簡單的數據清洗

前面我們已經爬取到到了一個簡單的網頁的信息,但是這些信息是雜亂無章的,接下我們已爬取研招網的院校庫為例,爬取每個院校的校名、所在地、院校隸屬,學習一下如何進行一個簡單的數據處理與爬取。

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

我們可以看到整個界面是十分復雜的,但是我們可以進行一個分析,我們所需要的數據僅僅是最下面的表格內的數據

?

通過查看網頁源碼可以發現,所有的院校信息確實是保存在下面的一個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">招生簡章</th></tr></thead><tbody><tr><td><a href="/sch/schoolInfo--schId-367878.dhtml" target="_blank">北京大學</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">進入</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">中國人民大學</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">進入</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">清華大學</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">進入</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">北京交通大學</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">進入</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">北京工業大學</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">進入</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">北京航空航天大學</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></tbody> </table>

?

我們可以發現數據是有規律的,每個tr的首個td是學校的名稱,第二個td是院校所在地,第三個td是院校的隸屬,我們需要的信息都有了,應該如何對這些復雜的信息進行一個簡單的清洗呢?

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方法中我們初步對數據進行了一個處理,使用了findAll來進行了數據的首次爬取,可以看到所需要的表格已經被爬取到了?

?

在handleSchoolInfo方法中同樣使用到了findAll("tr")來對數據進行一個清洗,通過tr的篩選之后,table標簽已經沒有了?

同理我們使用findAll("td")來進行td的篩選,同時可以發現一個數據是為空的,因為通過前面tr的篩選的首行信息里面是th而不是td的?

接下來由于只需要每個數據的前三行,所以只需要將前三個數據保存即可,然后將保存的數據進行一個有效數據的剝離

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()

?

但是此時爬取到的數據也僅僅是當前頁的數據,通過分析研招網的鏈接不難得知,每一頁之間的差距僅僅是在最后的參數不同,那么在爬蟲的URL進行修改即可

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

?

數據庫的連接

使用的數據庫是SQL Server 2012,首先需要的是進行包的安裝與引入使用的是

import pyodbc

?

安裝參考包的安裝
pyodbc模塊是用于odbc數據庫(一種數據庫通用接口標準)的連接,不僅限于SQL server,還包括Oracle,MySQL,Access,Excel等

連接字符串的編寫

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

?

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

cursor = conn.cursor()

?

數據庫連接就已經完成了,接下來就是數據庫的基本操作了

數據寫入到數據庫

上面我們已經找到了需要的數據同時也建立了數據庫的連接,接下來就是將數據插入到數據庫了

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("插入出錯") 11 conn.rollback()

?

我們可以看到數據庫內確實已經有數據了?

?

最后關閉數據庫的連接

conn.close()

?

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

轉載于:https://www.cnblogs.com/ladyzhu/p/10477785.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。