电子商务网站建设实践,网站推广方案注意事项,客户管理软件crm,平面广告怎么设计影评许可证公众号[2019]第22期本栏目由“数据皮皮侠”独家呈献专场python爬虫实战——豆瓣电影get初体验2019.10.28 / 早上7点场 / 免费本期“栏目”的四大看点#xff1a;1 如何爬取2 如何解析与提取3 如何解析json数据4 实战#xff1a;爬取豆瓣影视信息1 如何爬取how to O… 影评许可证公众号[2019]第22期本栏目由“数据皮皮侠”独家呈献专场python爬虫实战——豆瓣电影get初体验2019.10.28 / 早上7点场 / 免费本期“栏目”的四大看点1 如何爬取2 如何解析与提取3 如何解析json数据4 实战爬取豆瓣影视信息1 如何爬取how to Obtain我们老说爬虫那么具体到底怎么爬爬什么首先“爬虫四步”获取数据(包含请求和响应两个动作)、解析数据、提取数据、存储数据。最简单的请求方式是requests.get()代码import requestsurl response requests.get(url)此外我们还需要一个工具叫做Network。在它的帮助下我们能看到所有的请求这样我们才能完成爬虫四步Network能够记录浏览器的所有请求。我们最常用的是ALL(查看全部)/XHR(仅查看XHR)/Doc(Document第0个请求一般在这里)有时候也会看看Img(仅查看图片)/Media(仅查看媒体文件)/Other(其他)。最后JS和CSS则是前端代码负责发起请求和页面实现Font是文字的字体。在爬虫里 XHR和Doc是我们最常用的。我们能在Doc里找到一个网页的源代码而在网页源代码里找不到的信息通常都能在XHR里找到。有它的存在人们不必刷新/跳转网页即可加载新的内容。2 解析与提取Parsing and Reading当数据藏匿于网页源代码在“爬虫四步”链里最重要的库叫BeautifulSoup它能提供一套完整的数据解析、数据提取解决方案。(关于BeautifulSoup的安装和使用在前期文章中介绍过哦~)XHR所传输的数据最重要的一种是用json格式写成的和html一样这种数据能够有组织地存储大量内容。json的数据类型是“文本”我们称为字符串。我们能很容易将json格式的数据转化为列表/字典反之也可以。3 如何解析json数据How to Parse JSON Data通过Response类支持使用json()方法来将数据转为list/dic比如import requestsrrequests.get(‘http://……’)print(r.json())请求本身很有意思。requests.get()里面其实只有一个参数即url。但其实这个请求可以有多个参数。params可以让我们带着参数来请求数据我想要第几页我想要搜索的关键词我想要多少个数据headers请求头。它告诉服务器我的设备/浏览器是什么我从哪个页面而来再往后除了get请求之外还存在着另一种请求方式——post。post区别于get的是get是明文显示参数post是非明文显示参数。学会post又有两个参数可用(1)在post请求里我们使用data来传递参数其用法和params非常相像。(2)cookies中文名是“小饼干”。但它却和“小饼干”并无关联。它的作用是让服务器“记住你”比如一般当你登录一个网站你都会在登录页面看到一个可勾选的选项“记住我”。如果你点了勾选服务器就会生成一个cookies和你的账号绑定。接着它把这个cookies告诉你的浏览器让浏览器把cookies存储到你的本地电脑。当下一次浏览器带着cookies访问博客服务器会知道你是何人你不需要再重复输入账号密码就能直接访问。到这考虑极端情况。代码可能会是这样import requestsurl_1 https://…headers {user-agent:}data {}# 定义urlheaders和datalogin_in requests.post(url,headersheaders,datadata)cookies login_in.cookies# 完成登录获取cookiesurl_2 https://…params {}# 定义url和paramsresponserequests.get(url,headersheaders,paramsparams,cookiescookies)# 带着cookies重新发起请求4 如何爬取豆瓣电影数据Get Douban Movie Data4.1创建爬虫文件获取url地址地址为urlhttps://movie.douban.com/top2504.2使用request获取第一页的请求信息import requestsfrom bs4 import BeautifulSoupurlhttps://movie.douban.com/top250wb_datarequests.get(url)# 获取网页文本信息soupBeautifulSoup(wb_data.text,lxml)# 从soup中提取我们想要的信息titlessoup.select(div.hda)ratessoup.select(span.rating_num)imgssoup.select(img[])for title,rate,img in zip(titles,rates,imgs): data{ title:list(title.stripped_strings), rate:rate.get_text(), img:img.get(src) } print (data)4.3获取多页的请求信息import requestsfrom bs4 import BeautifulSoupurls[https://movie.douban.com/top250?startnfilter for n in range(0,250,25)]for url in urls: wb_datarequests.get(url) # 获取网页文本信息 soupBeautifulSoup(wb_data.text,lxml) # 从soup中提取我们想要的信息 titlessoup.select(div.hda) ratessoup.select(span.rating_num) imgssoup.select(img[]) for title,rate,img in zip(titles,rates,imgs): data{ title:list(title.stripped_strings), rate:rate.get_text(), img:img.get(src) } print(data)4.4下载电影图片地址到本地import requestsfrom bs4 import BeautifulSoupi0urls[https://movie.douban.com/top250?startnfilter for n in range(0,250,25)]for url in urls: wb_datarequests.get(url) # 获取网页文本信息 soupBeautifulSoup(wb_data.text,lxml) # 从soup中提取我们想要的信息 titlessoup.select(div.hda) ratessoup.select(span.rating_num) imgssoup.select(img[]) for title,rate,img in zip(titles,rates,imgs): data{ title:list(title.stripped_strings), rate:rate.get_text(), img:img.get(src) } # 保存图片到本地 i1 fileNamestr(i)、data[title][0]data[rate]分.jpg picrequests.get(data[img]) with open(E:/Envs/douban/douban_imgs/fileName,wb)as photo: photo.write(pic.content) print(data)4.5爬取豆瓣热门美剧存储到mongodb中将json数据转换为字典然后根据键subjects循环取出里面的值取出我们想要的数据import requests,jsonurlhttps://movie.douban.com/j/search_subjects?typetvtag%E7%BE%8E%E5%89%A7sortrecommendpage_limit20page_start0response_datarequests.get(url)# 将json数据转换为字典类型并根据键名循环取出值json_datajson.loads(response_data.text)# 查看键名# print(json_data)for tv in json_data[subjects]: # print(tv) # 取出我们需要的数据 data{ rate:tv[rate], title:tv[title], img_url:tv[cover], id:tv[id], # 自定义一个标志 tag:美剧 } print(data)获取多页数据import requests,json# urlhttps://movie.douban.com/j/search_subjects?typetvtag%E7%BE%8E%E5%89%A7sortrecommendpage_limit20page_start0# 这里的200可以修改为更高数字目前只爬取200条数据urls[https://movie.douban.com/j/search_subjects?typetvtag%E7%BE%8E%E5%89%A7sortrecommendpage_limit20page_startstr(n) for n in range(0,200,20)]for url in urls: response_datarequests.get(url) # 将json数据转换为字典类型并根据键名循环取出值 json_datajson.loads(response_data.text) # 查看键名 # print(json_data) for tv in json_data[subjects]: # print(tv) # 取出我们需要的数据 data{ rate:tv[rate], title:tv[title], img_url:tv[cover], id:tv[id], # 自定义一个标志 tag:美剧 } print(data) 保存数据到mongodb数据库里面import requests,json,pymongo# urlhttps://movie.douban.com/j/search_subjects?typetvtag%E7%BE%8E%E5%89%A7sortrecommendpage_limit20page_start0# 这里的200可以修改为更高数字目前只爬取200条数据clientpymongo.MongoClient(hostlocalhost,port27017)dbclient.db_bkcollection db.doubanurls[https://movie.douban.com/j/search_subjects?typetvtag%E7%BE%8E%E5%89%A7sortrecommendpage_limit20page_startstr(n) for n in range(0,200,20)]for url in urls: response_datarequests.get(url) # 将json数据转换为字典类型并根据键名循环取出值 json_datajson.loads(response_data.text) # 查看键名 # print(json_data) for tv in json_data[subjects]: # print(tv) # 取出我们需要的数据 data{ rate:tv[rate], title:tv[title], img_url:tv[cover], id:tv[id], # 自定义一个标志 tag:美剧 } collection.insert_one(data) print(data)END本期“ 总导演 ”李雨萱本期“ 剪辑师 ”李嘉楠本期“栏目”进入尾声了我们下期再见如果你有任何问题欢迎在“栏目下方”留言关注公众号还可获取更多python的相关内容