十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了python如何實(shí)現(xiàn)爬蟲程序,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
什么是網(wǎng)絡(luò)爬蟲
簡(jiǎn)單的講,網(wǎng)絡(luò)爬蟲就是模擬人訪問web站點(diǎn)的行為來獲取有價(jià)值的數(shù)據(jù)。專業(yè)的解釋:百度百科
分析爬蟲需求
確定目標(biāo)
爬取豆瓣熱度在Top100以內(nèi)的電影的一些信息,包括電影的名稱、豆瓣評(píng)分、導(dǎo)演、編劇、主演、類型、制片國(guó)家/地區(qū)、語言、上映日期、片長(zhǎng)、IMDb鏈接等信息。
分析目標(biāo)
1.借助工具分析目標(biāo)網(wǎng)頁(yè)
首先,我們打開豆瓣電影·熱門電影,會(huì)發(fā)現(xiàn)頁(yè)面總共20部電影,但當(dāng)查看頁(yè)面源代碼當(dāng)時(shí)候,在源代碼中根本找不到這些電影當(dāng)信息。這是為什么呢?原來豆瓣在這里是通過ajax技術(shù)獲取電影信息,再動(dòng)態(tài)的將數(shù)據(jù)加載到頁(yè)面中的。這就需要借助Chrome的開發(fā)者工具,先找到獲取電影信息的API。
然后對(duì)電影詳情頁(yè)進(jìn)行分析
思路分析
具體實(shí)現(xiàn)
開發(fā)環(huán)境
python3.6
pycharm
主要依賴庫(kù)
urllib -- 基礎(chǔ)性的網(wǎng)絡(luò)相關(guān)操作
lxml -- 通過xpath語法解析HTML頁(yè)面
json -- 對(duì)通過API獲取的JSON數(shù)據(jù)進(jìn)行操作
re -- 正則操作
代碼實(shí)現(xiàn)
from urllib import request from lxml import etree import json import re import ssl # 全局取消證書驗(yàn)證 ssl._create_default_https_context = ssl._create_unverified_context def get_headers(): """ 返回請(qǐng)求頭信息 :return: """ headers = { 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/65.0.3325.181 Safari/537.36" } return headers def get_url_content(url): """ 獲取指定url的請(qǐng)求內(nèi)容 :param url: :return: """ content = '' headers = get_headers() res = request.Request(url, headers=headers) try: resp = request.urlopen(res, timeout=10) content = resp.read().decode('utf-8') except Exception as e: print('exception: %s' % e) return content def parse_content(content): """ 解析網(wǎng)頁(yè) :param content: :return: """ movie = {} html = etree.HTML(content) try: info = html.xpath("http://div[@id='info']")[0] movie['director'] = info.xpath("./span[1]/span[2]/a/text()")[0] movie['screenwriter'] = info.xpath("./span[2]/span[2]/a/text()")[0] movie['actors'] = '/'.join(info.xpath("./span[3]/span[2]/a/text()")) movie['type'] = '/'.join(info.xpath("./span[@property='v:genre']/" "text()")) movie['initialReleaseDate'] = '/'.\ join(info.xpath(".//span[@property='v:initialReleaseDate']/text()")) movie['runtime'] = \ info.xpath(".//span[@property='v:runtime']/text()")[0] def str_strip(s): return s.strip() def re_parse(key, regex): ret = re.search(regex, content) movie[key] = str_strip(ret[1]) if ret else '' re_parse('region', r'制片國(guó)家/地區(qū):(.*?)
') re_parse('language', r'語言:(.*?)
') re_parse('imdb', r'IMDb鏈接: ') except Exception as e: print('解析異常: %s' % e) return movie def spider(): """ 爬取豆瓣前100部熱門電影 :return: """ recommend_moives = [] movie_api = 'https://movie.douban.com/j/search_subjects?' \ 'type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend' \ '&page_limit=100&page_start=0' content = get_url_content(movie_api) json_dict = json.loads(content) subjects = json_dict['subjects'] for subject in subjects: content = get_url_content(subject['url']) movie = parse_content(content) movie['title'] = subject['title'] movie['rate'] = subject['rate'] recommend_moives.append(movie) print(len(recommend_moives)) print(recommend_moives) if __name__ == '__main__': spider()
效果
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python如何實(shí)現(xiàn)爬蟲程序”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!