最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python7個爬蟲小案例詳解(附源碼)中篇

 更新時間:2023年01月11日 17:03:43   作者:艾派森  
這篇文章主要介紹了Python7個爬蟲小案例詳解(附源碼)中篇,本文章內(nèi)容詳細,通過案例可以更好的理解爬蟲的相關知識,七個例子分為了三部分,本次為中篇,共有二道題,需要的朋友可以參考下

本次的7個python爬蟲小案例涉及到了re正則、xpath、beautiful soup、selenium等知識點,非常適合剛入門python爬蟲的小伙伴參考學習。

前言

關于Python7個爬蟲小案例的文章分為三篇,本篇為中篇,共兩題,其余兩篇內(nèi)容請關注!

題目三:

分別使用XPath和Beautiful Soup4兩種方式爬取并保存非異步加載的“豆瓣某排行榜”如https://movie.douban.com/top250的名稱、描述、評分和評價人數(shù)等數(shù)據(jù)

 先分析:

首先,來到豆瓣Top250頁面,首先使用Xpath版本的來抓取數(shù)據(jù),先分析下電影列表頁的數(shù)據(jù)結構,發(fā)下都在網(wǎng)頁源代碼中,屬于靜態(tài)數(shù)據(jù)

接著我們找到數(shù)據(jù)的規(guī)律,使用xpath提取每一個電影的鏈接及電影名

然后根據(jù)鏈接進入到其詳情頁

分析詳情頁的數(shù)據(jù),發(fā)現(xiàn)也是靜態(tài)數(shù)據(jù),繼續(xù)使用xpath提取數(shù)據(jù)

最后我們將爬取的數(shù)據(jù)進行存儲,這里用csv文件進行存儲

接著是Beautiful Soup4版的,在這里,我們直接在電影列表頁使用bs4中的etree進行數(shù)據(jù)提取

最后,同樣使用csv文件進行數(shù)據(jù)存儲

源代碼即結果截圖:

XPath版:

import re
from time import sleep
import requests
from lxml import etree
import random
import csv
 
def main(page,f):
    url = f'https://movie.douban.com/top250?start={page*25}&filter='
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36',}
    resp = requests.get(url,headers=headers)
    tree = etree.HTML(resp.text)
    # 獲取詳情頁的鏈接列表
    href_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href')
    # 獲取電影名稱列表
    name_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')
    for url,name in zip(href_list,name_list):
        f.flush()  # 刷新文件
        try:
            get_info(url,name)  # 獲取詳情頁的信息
        except:
            pass
        sleep(1 + random.random())  # 休息
    print(f'第{i+1}頁爬取完畢')
 
def get_info(url,name):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36',
        'Host': 'movie.douban.com',
    }
    resp = requests.get(url,headers=headers)
    html = resp.text
    tree = etree.HTML(html)
    # 導演
    dir = tree.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]
    # 電影類型
    type_ = re.findall(r'property="v:genre">(.*?)</span>',html)
    type_ = '/'.join(type_)
    # 國家
    country = re.findall(r'地區(qū):</span> (.*?)<br',html)[0]
    # 上映時間
    time = tree.xpath('//*[@id="content"]/h1/span[2]/text()')[0]
    time = time[1:5]
    # 評分
    rate = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]
    # 評論人數(shù)
    people = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/a/span/text()')[0]
    print(name,dir,type_,country,time,rate,people)  # 打印結果
    csvwriter.writerow((name,dir,type_,country,time,rate,people))  # 保存到文件中
 
if __name__ == '__main__':
    # 創(chuàng)建文件用于保存數(shù)據(jù)
    with open('03-movie-xpath.csv','a',encoding='utf-8',newline='')as f:
        csvwriter = csv.writer(f)
        # 寫入表頭標題
        csvwriter.writerow(('電影名稱','導演','電影類型','國家','上映年份','評分','評論人數(shù)'))
        for i in range(10):  # 爬取10頁
            main(i,f)  # 調(diào)用主函數(shù)
            sleep(3 + random.random())

Beautiful Soup4版: 

import random
import urllib.request
from bs4 import BeautifulSoup
import codecs
from time import sleep
 
def main(url, headers):
    # 發(fā)送請求
    page = urllib.request.Request(url, headers=headers)
    page = urllib.request.urlopen(page)
    contents = page.read()
    # 用BeautifulSoup解析網(wǎng)頁
    soup = BeautifulSoup(contents, "html.parser")
    infofile.write("")
    print('爬取豆瓣電影250: \n')
 
    for tag in soup.find_all(attrs={"class": "item"}):
        # 爬取序號
        num = tag.find('em').get_text()
        print(num)
        infofile.write(num + "\r\n")
        # 電影名稱
        name = tag.find_all(attrs={"class": "title"})
        zwname = name[0].get_text()
        print('[中文名稱]', zwname)
        infofile.write("[中文名稱]" + zwname + "\r\n")
        # 網(wǎng)頁鏈接
        url_movie = tag.find(attrs={"class": "hd"}).a
        urls = url_movie.attrs['href']
        print('[網(wǎng)頁鏈接]', urls)
        infofile.write("[網(wǎng)頁鏈接]" + urls + "\r\n")
        # 爬取評分和評論數(shù)
        info = tag.find(attrs={"class": "star"}).get_text()
        info = info.replace('\n', ' ')
        info = info.lstrip()
        print('[評分評論]', info)
        # 獲取評語
        info = tag.find(attrs={"class": "inq"})
        if (info):  # 避免沒有影評調(diào)用get_text()報錯
            content = info.get_text()
            print('[影評]', content)
            infofile.write(u"[影評]" + content + "\r\n")
        print('')
 
 
if __name__ == '__main__':
    # 存儲文件
    infofile = codecs.open("03-movie-bs4.txt", 'a', 'utf-8')
    # 消息頭
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    # 翻頁
    i = 0
    while i < 10:
        print('頁碼', (i + 1))
        num = i * 25  # 每次顯示25部 URL序號按25增加
        url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='
        main(url, headers)
        sleep(5 + random.random())
        infofile.write("\r\n\r\n")
        i = i + 1
    infofile.close()

題目四: 

實現(xiàn)某東商城某商品評論數(shù)據(jù)的爬?。ㄔu論數(shù)據(jù)不少于100條,包括評論內(nèi)容、時間和評分)

 先分析:

 本次選取的某東官網(wǎng)的一款聯(lián)想筆記本電腦,數(shù)據(jù)為動態(tài)加載的,通過開發(fā)者工具抓包分析即可。

源代碼及結果截圖:

import requests
import csv
from time import sleep
import random
 
def main(page,f):
    url = 'https://club.jd.com/comment/productPageComments.action'
    params = {
        'productId': 100011483893,
        'score': 0,
        'sortType': 5,
        'page': page,
        'pageSize': 10,
        'isShadowSku': 0,
        'fold': 1
    }
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36',
        'referer': 'https://item.jd.com/'
    }
    resp = requests.get(url,params=params,headers=headers).json()
    comments = resp['comments']
    for comment in comments:
        content = comment['content']
        content = content.replace('\n','')
        comment_time = comment['creationTime']
        score = comment['score']
        print(score,comment_time,content)
        csvwriter.writerow((score,comment_time,content))
    print(f'第{page+1}頁爬取完畢')
 
if __name__ == '__main__':
    with open('04.csv','a',encoding='utf-8',newline='')as f:
        csvwriter = csv.writer(f)
        csvwriter.writerow(('評分','評論時間','評論內(nèi)容'))
        for page in range(15):
                main(page,f)
                sleep(5+random.random())

到此這篇關于Python7個爬蟲小案例詳解(附源碼)中篇的文章就介紹到這了,其他兩個部分的內(nèi)容(上、下篇)請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Python在使用JSON時需要注意的編碼問題

    詳解Python在使用JSON時需要注意的編碼問題

    這篇文章主要介紹了詳解Python在使用JSON時需要注意的編碼問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Django中的事務ATOMIC_REQUESTS

    Django中的事務ATOMIC_REQUESTS

    這篇文章主要介紹了Django中的事務ATOMIC_REQUESTS使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 關于keras中的Reshape用法

    關于keras中的Reshape用法

    這篇文章主要介紹了關于keras中的Reshape用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python實現(xiàn)九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈

    Python實現(xiàn)九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈

    PIL(Python Imaging Library)是一個非常強大的Python庫,但是它支持Python2.X, 在Python3中則使用的是Pillow庫,它是從PIL中fork出來的一個分支。這篇文章主要介紹了用Python搞定九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈 ,需要的朋友可以參考下
    2019-05-05
  • python操作配置文件實戰(zhàn)記錄

    python操作配置文件實戰(zhàn)記錄

    這篇文章主要給大家介紹了關于python操作配置文件的相關資料,配置文件是為程序配置參數(shù)和初始設置的文件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • python把ipynb文件轉換成pdf文件過程詳解

    python把ipynb文件轉換成pdf文件過程詳解

    這篇文章主要介紹了用python把ipynb文件轉換成pdf文件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 使用keras和tensorflow保存為可部署的pb格式

    使用keras和tensorflow保存為可部署的pb格式

    這篇文章主要介紹了使用keras和tensorflow保存為可部署的pb格式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python之京東商品秒殺的實現(xiàn)示例

    Python之京東商品秒殺的實現(xiàn)示例

    這篇文章主要介紹了Python之京東商品秒殺的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python數(shù)據(jù)結構之棧詳解

    Python數(shù)據(jù)結構之棧詳解

    棧和隊列是在程序設計中常見的數(shù)據(jù)類型,從數(shù)據(jù)結構的角度來講,棧和隊列也是線性表,是操作受限的線性表。本文將詳細介紹一下Python中的棧,感興趣的可以了解一下
    2022-03-03
  • 十一個案例帶你吃透Python函數(shù)參數(shù)

    十一個案例帶你吃透Python函數(shù)參數(shù)

    這篇文章主要通過十一個案例帶大家一起了解一下Python中的函數(shù)參數(shù),文中的示例代碼講解詳細,對我們學習Python有一定幫助,需要的可以參考一下
    2022-08-08

最新評論

彰化县| 工布江达县| 汝阳县| 长宁县| 南开区| 方山县| 柳河县| 潞城市| 阿巴嘎旗| 化德县| 庆阳市| 西宁市| 通渭县| 赤水市| 广昌县| 密山市| 岗巴县| 昭觉县| 句容市| 芮城县| 甘孜县| 白城市| 四川省| 壶关县| 南雄市| 商都县| 兴业县| 衡水市| 南岸区| 都安| 梧州市| 武川县| 原阳县| 新竹县| 丹阳市| 丹寨县| 霍城县| 漳浦县| 自贡市| 祥云县| 临猗县|