1. 程式人生 > >使用requests和xpath爬取貓眼TOP100電影

使用requests和xpath爬取貓眼TOP100電影

技術路線:requests-xpath

- 使用 requests 獲取網頁內容

使用 try...except 獲取網頁內容

- 使用 xpath 解析網頁

對主要資訊使用 xpath 進行提取

- 翻頁及反爬處理

貓眼的翻頁處理是 url 處進行翻頁的

http://maoyan.com/board/4?offset=0

http://maoyan.com/board/4?offset=10

所以可以拼接處理url

貓眼的反爬主要是根據 user-agent 判斷,所以訪問的時候需要指定 headers


#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import requests
from lxml import etree

def getHtml(url, headers):
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        print('ERROR')


def fillList(html):
    html = etree.HTML(html)
    img = html.xpath('//*[@id="app"]/div/div/div/dl/dd/a/img[2]/@data-src')    # 這裡存在坑,使用Chrome檢視元素時,圖片屬性是src,實際使用requests獲取的時候,圖片屬性是data-src
    title = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/text()')
    star = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()')
    releasetime = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()')
    for i in range(len(title)):
        temp = {
            'img': img[i][:-16],    # 提取圖片的時候存在圖片大小設定等,使用切片去除
            'title': title[i],
            'star': star[i].strip(),    # 提取主演資訊的時候有很多空格跟換行符,使用.strip()函式去除
            'releasetime': releasetime[i],
        }
        print(temp)

def main():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
    }
    deep = 10
    for i in range(deep):
        url = 'http://maoyan.com/board/4?offset='+str(i*10)
        html = getHtml(url, headers=headers)
        print("正在列印第%s頁" % (i+1))
        fillList(html)

if __name__ == '__main__':
    main()