requests和lxml爬取貓眼電影TOP100

看到他們說使用 xpath 定位元素比較可靠然後自己嘗試着修改用正則來提取貓眼電影的數據,話不多說進入正題

導入相關的庫

import requests
from requests.exceptions import RequestException
from multiprocessing import Pool
from lxml import etree

嘗試着獲取頁面的內容

def get_one_page(url):
    try:
        headers = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"}
        response  = requests.get(url=url,headers = headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

加了個簡單的異常處理

通過xpath匹配獲取需要的內容

def parse_one_page(html):
    tree = etree.HTML(html)
    for num in range(1,11):
        index = ''.join(tree.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[{}]/i/text()'.format(num)))
        title = ''.join(tree.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[{}]/div/div/div[1]/p[1]/a/text()'.format(num)))
        actor =(''.join(tree.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[{}]/div/div/div[1]/p[2]/text()'.format(num)))).strip()
        time = ''.join(tree.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[{}]/div/div/div[1]/p[3]/text()'.format(num)))
        score =''.join(tree.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[{}]/div/div/div[2]/p/i[1]/text()'.format(num))) + ''.join(tree.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[{}]/div/div/div[2]/p/i[2]/text()'.format(num)))
        data = index + ' ' + title + ' ' + actor + ' ' + time + ' ' +score
        write_to_file(data)

因爲每頁是十部電影的內容 通過循環獲取當前頁面的所有 排名 電影名字 主演
上映時間 評分 xpath匹配得到的數據是列表類型 我將它轉換成字符串類型進行操作 然後將每部電影的內容整合到data中

寫入文件

def write_to_file(content):
    with open(r"E:\python\爬蟲\data.txt","a",encoding="utf-8") as f:
        f.write(content + '\n')

在parse_one_page這個函數中 每次獲取到一個電影的內容將它以追加的形式寫入文件

main()

def main(offset):
    url = r"http://maoyan.com/board/4?offset=" + str(offset)
    html = get_one_page(url)
    parse_one_page(html)


if __name__  == "__main__":
    # 1 用循環對其他頁面的抓取
    for i in range(10):
        main(10*i)
    # 2 使用進程池加快抓取效率
    # pp = Pool()
    # pp.map(main,[i*10 for i in range(10)])

兩種方式對其他頁面的抓取

文件中數據的截圖
這裏寫圖片描述

歡迎大家對我程序的漏洞提出建議 謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章