淘票票经典Python爬虫案例

本demo使用python来爬取淘票票热门电影的相关信息
代码如下:

import requests
from requests.exceptions import RequestException
from pyquery import PyQuery as pq
import json

# 获取爬取的页面html代码
def get_one_page(url):
  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
  try:
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
      return response.text
    return None
  except RequestException:
    return None
    
# 获取从html里有用的数据
def parse_one_page(html):
  doc = pq(html)
  lists = doc('.tab-movie-list').eq(0)
  titles = lists.find('.bt-l')
  scores = lists.find('.bt-r')
  list2 = lists.find('.movie-card-list')
  authors =list2.find('span:nth-child(1)')
  actors = list2.find('span:nth-child(2)')
  types = list2.find('span:nth-child(3)')
  areas = list2.find('span:nth-child(4)')
  languges = list2.find('span:nth-child(5)')
  durations = list2.find('span:nth-child(6)')
  for index in range(titles.length):
    yield {
      'title': titles.eq(index).text(),
      'score': scores.eq(index).text(),
      'director': authors.eq(index).text()[3:],
      'actor': actors.eq(index).text()[3:],
      'type': types.eq(index).text()[3:],
      'region': areas.eq(index).text()[3:],
      'language': languges.eq(index).text()[3:],
      'duration': durations.eq(index).text()[3:],
    }

# 写入本地,以文本形式保存
def write_to_file(content):
  with open('淘票票热门电影.txt', 'w', encoding='utf-8') as f:
    f.write(json.dumps(content, ensure_ascii=False) + '\n')
    f.close()

# 主函数
def main():
  url = 'https://dianying.taobao.com/showList.htm?spm=a1z21.3046609.w2.3.50af112aVyLbGL&n_s=new'
  html = get_one_page(url)
  parse_one_page(html)
  print(parse_one_page(html))
  li = []
  for item in parse_one_page(html):
    li.append(item)
    print(item)
  write_to_file(li)

if __name__=='__main__':
  main()

1.首先需要安装python环境,直接下载python安装即可

2.这里需要用到requests模块和PyQuery模块,使用 pip install 模块名 安装即可,如果下载过慢或出现错误可以从清华大学镜像拉取安装:使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 模块名 安装即可

3.代码解释

函数 get_one_page 获取要爬取网页的html代码
有些网站的请求可能需要headers参数才能正常访问,所以在请求的时候加上headers的User-Agent参数即可。
首先尝试使用requests模块去请求要爬取的页面,如果状态码返回200,则返回html页面代码,否则抛出异常

函数 parse_one_page 从html代码里获取有用的相关信息,并返回可保存的数据形式
这里使用PyQuery模块,如果熟悉Jquery,那么这个也容易上手,因为其api基本上和Jquery是一样的,使用此模块获取相关数据是很方便的,就像操纵DOM一样,如果使用正则表达式(re模块),就没有那么简单直观了,也不好理解,容易出错。使用PyQuery获取完成之后,使用循环,每循环一次返回一个字典结构,里面定义了相关键名用来保存爬取的对应内容

函数 write_to_file 把爬取的数据以文本的形式保存到本地,这个函数没太多说明的,熟悉python I/O相关api即可,另外里面使用了json模块,将传入的内容以json字符串的形式保存

函数 main 为主函数 其中:url为要爬取的目标网页,li为一个列表,我们循环parse_one_page返回的结果,将每条数据插入li列表,然后将li传入write_to_file函数,最终会返回一个标准json字符串,即一个数组里面包含多个对象的形式,以便他人使用

最后在入口执行主函数,就能得到想要的结果了

4.由于疫情的影响,淘票票电影排行页面没有数据,这里我贴了

总结:python用来写爬虫是很方便的,整个小demo只使用了60行不到的代码就能完成爬取功能。除此之外,python的语法跟javascript语法比较接近,如果熟悉js的,那么学习python也是比较容易的。

你可能感兴趣的:(Python,python,py,python爬虫,淘票票)