色酷快播,极品女太监,小型雪纳瑞犬
python
|网络爬虫
这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识。
简单的讲,网络爬虫就是模拟人访问web站点的行为来获取有价值的数据。专业的解释:百度百科
爬取豆瓣热度在Top100以内的电影的一些信息,包括电影的名称、豆瓣评分、导演、编剧、主演、类型、制片国家/地区、语言、上映日期、片长、IMDb链接等信息。
python3.6
pycharm
urllib
-- 基础性的网络相关操作
lxml
-- 通过xpath
语法解析HTML页面
json
-- 对通过API获取的JSON数据进行操作
re
-- 正则操作
from urllib import request from lxml import etree import json import re import ssl # 全局取消证书验证 ssl._create_default_https_context = ssl._create_unverified_context def get_headers(): """ 返回请求头信息 :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的请求内容 :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): """ 解析网页 :param content: :return: """ movie = {} html = etree.HTML(content) try: info = html.xpath("//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'<span class="pl">制片国家/地区:</span>(.*?)<br/>') re_parse('language', r'<span class="pl">语言:</span>(.*?)<br/>') re_parse('imdb', r'<span class="pl">IMDb链接:</span> <a href="(.*?)" ' r'target="_blank" rel="nofollow">') 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()
本文较详细的阐述了一个爬虫从需求->分析->实现的过程,并给出了具体的代码实现。通过对本文的学习,我们可以了解到网络爬虫的一些基本的知识,以及python的一些基本库的使用方法。接下来我会使用一些高级些的网络操作相关的库以及对抓取到的数据做个存储的方式,来更深层次的理解python网络爬虫。
1. 本文涉及到的豆瓣网是国内知名网站,若有侵权之处,请告知。 2. 本文属作者原创,转载请标明出处;未经允许,不得用于商业用途。 3. 本文只是用作网络爬虫技术学习交流,读者涉及到的任何侵权问题,与本文作者无关。
笔者对应的简书文章
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论