python爬取电影和美食数据实战

简介: 本文使用的是requests+正则来匹配网页内容,对于数据量较多的采用了多线程抓取的方法,共3个案例,分别是抓取猫眼电影TOP100榜单和淘票票正在热映的电影信息、以及美团的美食数据。这几个案例采用的方法大同小异。 1、首先选择想要爬取的网站 2、确定要用的模块,requests,json,...
本文使用的是requests+正则来匹配网页内容,对于数据量较多的采用了多线程抓取的方法,共3个案例,分别是抓取猫眼电影TOP100榜单和淘票票正在热映的电影信息、以及美团的美食数据。这几个案例采用的方法大同小异。

   1、首先选择想要爬取的网站
   2、确定要用的模块,requests,json,re三个模块,如果想加快爬取速度可以加一个Pool
   3、 网页请求,先得到整个页面,需要加一个headers来进行请求,否则会被网站拦截
   4、格式化整个页面,通过patter的正则来匹配,找出我们需要的内容,
   5、   获取数据,findall,然后通过yield将数据返回,yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值
   6、遍历获取到的数据
   7、保存到相应的文档中
   8、关闭文档,
   9、提示数据保存成功。


一、爬取猫眼电影Top100榜单的数据
4b481a8b06d0cb199a85ff95b6b340cce5e1c2eb
import requests
from multiprocessing  import Pool
from requests.exceptions  import RequestException
import re
import json

def  get_one_page(url):
try:
headers = {
"user-agent"'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
11
response = requests.get(url ,  headers=headers)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None

def  parse_one_page(html):
pattern = re.compile( '<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>' , re.S)

items =re.findall(pattern ,html)
for item  in items:
yield {
'index':item[ 0] ,
'image':item[ 1] ,
'title':item[ 2] ,
'actor':item[ 3].strip()[ 3:] ,
'time': item[ 4].strip()[ 5:] ,
'score': item[ 5] + item[ 6]
}

def  write_to_file(content):
with  open( 'result.txt' ,  'a' ,  encoding= 'utf-8'as f:
f.write(json.dumps(content ,  ensure_ascii= False) +  ' \n ')
f.close()


def  main(offset):
url = 'http://maoyan.com/board/4?offset='+ str(offset)
html = get_one_page(url)
for item  in parse_one_page(html):
#print(item)
write_to_file(item)

if __name__ ==  '__main__':
#for i in range(10):
# main(i*10)
pool = Pool()
pool.map(main ,[i* 10  for i  in  range( 10)])


结果:将爬取的数据存放到文本文件中,
因为我这边采用的是线程池爬取的,所以有时候是不按顺序进行存储的,如果采用非多线程方式,就会按照顺序进行存储。

2f93b76a44a7a37d8643afa3308dd20b8e60e957



二、爬取淘票票正在热映的电影

09312c3acc4fd4721f2ecc9d0f823f8cab28a11a
可以看到网页结构如下,我这边使用了正则匹配的方法进行查找:

54a5bc36a9ccfe0eab00f53fefa0cd3211663879
代码如下:

import requests
from requests.exceptions  import RequestException
import re
import json

def  get_one_page(url):
     try:
        headers = {
             "user-agent"'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
         11
        response = requests.get(url headers=headers)
         if response.status_code == 200:
             return response.text
         return None
    except RequestException:
         return None

def  parse_one_page(html):

    pattern = re.compile( '<div class="movie-card-poster">.*?data-src="(.*?)".*?<span class="bt-l">(.*?)</span>.*?<span class="bt-r">(.*?)</span>.*?<div class="movie-card-list">.*?<span>(.*?)</span>'
    + '.*?<span>(.*?)</span>.*?<span>(.*?)</span>.*?<span>(.*?)</span>.*?<span>(.*?)</span>.*?<span>(.*?)</span>' ,re.S)

    items = re.findall(pattern html)
     for item  in items:
         yield {
             'image': item[ 0] ,
             'title': item[ 1] ,
             'score': item[ 2] ,
             'director': item[ 3].strip()[ 3:] ,
             'actor': item[ 4].strip()[ 3:] ,
             'type': item[ 5].strip()[ 3:] ,
             'area': item[ 6].strip()[ 3:] ,
             'language': item[ 7].strip()[ 3:] ,
             'time': item[ 8].strip()[ 3:]
        }


def  write_to_file(content):
     with  open( 'movie-hot.txt' 'a' encoding= 'utf-8'as f:
        f.write(json.dumps(content ensure_ascii= False) +  ' \n ')
        f.close()


def  main():
    url = 'https://www.taopiaopiao.com/showList.htm'
    html = get_one_page(url)
     for item  in parse_one_page(html):
         print(item)
        write_to_file(item)

if __name__ ==  '__main__':
       main()


结果:
f09314f5878a685c3256130bc49a0674502b6f53

三、爬取美团(深圳)美食店铺信息,评分大于4.0分的店铺

做为一名吃货,想知道我所在是城市的美食店,所以爬取评分较高的店铺信息:

eff3fd8f412f77c7ec54dd9d957e4ad206728d09



美团的这个网页的不同之处在于,全部是通过js渲染生成的,所以我这边是拿到页面后,在js里面查找到的数据,然后用正则来匹配。

import requests
from multiprocessing  import Pool
from requests.exceptions  import RequestException
import re
import json
"""
author  朱培
title   爬取美团(深圳)美食店铺信息,评分大于4.0分的店铺

"""
def  get_one_page(url):
     try:
        headers = {
             "user-agent"'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}

        response = requests.get(url headers=headers)
         if response.status_code == 200:
             return response.text
         return None
    except RequestException:
         return None

def  parse_one_page(html):

    pattern = re.compile( '"poiId":(.*?),"frontImg":"(.*?)","title":"(.*?)","avgScore":(.*?),"allCommentNum":(.*?)'
    + ',"address":"(.*?)","avgPrice":(.*?),' re.S)

    items = re.findall(pattern html)
     for item  in items:
         if  float(item[ 3]) >=  4.0:
             yield {
                 'poiId': item[ 0] ,
                 'frontImg': item[ 1] ,
                 'title': item[ 2] ,
                 'avgScore': item[ 3] ,
                 'allCommentNum':item[ 4] ,
                 'address': item[ 5] ,
                 'avgPrice': item[ 6]
            }


def  write_to_file(content):
     with  open( 'food-meituan.txt' 'a' encoding= 'utf-8'as f:
        f.write(json.dumps(content ensure_ascii= False) +  ' \n ')
        f.close()


def  main(n):
    url = 'http://sz.meituan.com/meishi/pn'+ str(n)+ '/'
    html = get_one_page(url)

     for item  in parse_one_page(html):
         print(item)
        write_to_file(item)

if __name__ ==  '__main__':
     #for i in range(32):
    #     main(i)
    pool = Pool()
    pool.map(main for in  range( 32)])


结果如下:

391899ec09b2dd677c0a9e8d3c7f13fa0ddd3d97

对于后期,可以选择把这个数据落库,常用的可以放在mongodb或者mysql数据库中进行存储。
目录
相关文章
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2天前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
70 61
Python装饰器实战:打造高效性能计时工具
|
4天前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
24天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
19天前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
数据安全/隐私保护 数据格式 Python
python爬取快手商品数据
python爬取快手商品数据
|
数据采集 Python
python使用aiohttp通过设置代理爬取基金数据
python使用aiohttp通过设置代理爬取基金数据
|
数据采集 前端开发 搜索推荐
python如何通过分布式爬虫爬取舆情数据
python如何通过分布式爬虫爬取舆情数据
python如何通过分布式爬虫爬取舆情数据
|
数据采集 Web App开发 JSON
python爬取共享单车悄然涨价大众的评论数据
python爬取共享单车悄然涨价大众的评论数据
|
数据采集 Python
python爬取叮咚买菜评价数据
python爬取叮咚买菜评价数据