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

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

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

本次的7個python爬蟲小案例涉及到了re正則、xpath、beautiful soup、selenium等知識點,非常適合剛?cè)腴Tpython爬蟲的小伙伴參考學(xué)習。

前言

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

題目一:

使用正則表達式和文件操作爬取并保存“百度貼吧”某帖子全部內(nèi)容(該帖不少于5頁)

 本次選取的是百度貼吧中的NBA吧中的一篇帖子,帖子標題是“克萊和哈登,誰歷史地位更高”。爬取的目標是帖子里面的回復(fù)內(nèi)容。

源程序和關(guān)鍵結(jié)果截圖:

import csv
import requests
import re
import time
 
def main(page):
    url = f'https://tieba.baidu.com/p/7882177660?pn={page}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
    }
    resp = requests.get(url,headers=headers)
    html = resp.text
    # 評論內(nèi)容
    comments = re.findall('style="display:;">                    (.*?)</div>',html)
    # 評論用戶
    users = re.findall('class="p_author_name j_user_card" href=".*?" rel="external nofollow"  target="_blank">(.*?)</a>',html)
    # 評論時間
    comment_times = re.findall('樓</span><span class="tail-info">(.*?)</span><div',html)
    for u,c,t in zip(users,comments,comment_times):
        # 篩選數(shù)據(jù),過濾掉異常數(shù)據(jù)
        if 'img' in c or 'div' in c or len(u)>50:
            continue
        csvwriter.writerow((u,t,c))
        print(u,t,c)
    print(f'第{page}頁爬取完畢')
 
if __name__ == '__main__':
    with open('01.csv','a',encoding='utf-8')as f:
        csvwriter = csv.writer(f)
        csvwriter.writerow(('評論用戶','評論時間','評論內(nèi)容'))
        for page in range(1,8):  # 爬取前7頁的內(nèi)容
            main(page)
            time.sleep(2)

題目二:

實現(xiàn)多線程爬蟲爬取某小說部分章節(jié)內(nèi)容并以數(shù)據(jù)庫存儲(不少于10個章節(jié)) 

 本次選取的小說網(wǎng)址是全本小說網(wǎng)https://www.qb5.tw/,這里我們選取第一篇小說進行爬取

然后通過分析網(wǎng)頁源代碼分析每章小說的鏈接

找到鏈接的位置后,我們使用Xpath來進行鏈接和每一章標題的提取

在這里,因為涉及到多次使用requests發(fā)送請求,所以這里我們把它封裝成一個函數(shù),便于后面的使用

每一章的鏈接獲取后,我們開始進入小說章節(jié)內(nèi)容頁面進行分析

通過網(wǎng)頁分析,小說內(nèi)容都在網(wǎng)頁源代碼中,屬于靜態(tài)數(shù)據(jù)

這里我們選用re正則表達式進行數(shù)據(jù)提取,并對最后的結(jié)果進行清洗

然后我們需要將數(shù)據(jù)保存到數(shù)據(jù)庫中,這里我將爬取的數(shù)據(jù)存儲到mysql數(shù)據(jù)庫中,先封住一下數(shù)據(jù)庫的操作

接著將爬取到是數(shù)據(jù)進行保存

最后一步就是使用多線程來提高爬蟲效率,這里我們創(chuàng)建了5個線程的線程池

 源代碼及結(jié)果截圖:

import requests
from lxml import etree
import re
import pymysql
from time import sleep
from concurrent.futures import ThreadPoolExecutor
 
def get_conn():
    # 創(chuàng)建連接
    conn = pymysql.connect(host="127.0.0.1",
                           user="root",
                           password="root",
                           db="novels",
                           charset="utf8")
    # 創(chuàng)建游標
    cursor = conn.cursor()
    return conn, cursor
 
def close_conn(conn, cursor):
    cursor.close()
    conn.close()
 
def get_xpath_resp(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
    resp = requests.get(url, headers=headers)
    tree = etree.HTML(resp.text)  # 用etree解析html
    return tree,resp
 
def get_chapters(url):
    tree,_ = get_xpath_resp(url)
    # 獲取小說名字
    novel_name = tree.xpath('//*[@id="info"]/h1/text()')[0]
    # 獲取小說數(shù)據(jù)節(jié)點
    dds = tree.xpath('/html/body/div[4]/dl/dd')
    title_list = []
    link_list = []
    for d in dds[:15]:
        title = d.xpath('./a/text()')[0]  # 章節(jié)標題
        title_list.append(title)
        link = d.xpath('./a/@href')[0]   # 章節(jié)鏈接
        chapter_url = url +link  # 構(gòu)造完整鏈接
        link_list.append(chapter_url)
    return title_list,link_list,novel_name
 
def get_content(novel_name,title,url):
    try:
        cursor = None
        conn = None
        conn, cursor = get_conn()
        # 插入數(shù)據(jù)的sql
        sql = 'INSERT INTO novel(novel_name,chapter_name,content) VALUES(%s,%s,%s)'
        tree,resp = get_xpath_resp(url)
        # 獲取內(nèi)容
        content = re.findall('<div id="content">(.*?)</div>',resp.text)[0]
        # 對內(nèi)容進行清洗
        content = content.replace('<br />','\n').replace('&nbsp;',' ').replace('全本小說網(wǎng) www.qb5.tw,最快更新<a  rel="external nofollow" >宇宙職業(yè)選手</a>最新章節(jié)!<br><br>','')
        print(title,content)
        cursor.execute(sql,[novel_name,title,content])  # 插入數(shù)據(jù)
        conn.commit()  # 提交事務(wù)保存數(shù)據(jù)
    except:
        pass
    finally:
        sleep(2)
        close_conn(conn, cursor)  # 關(guān)閉數(shù)據(jù)庫
 
 
if __name__ == '__main__':
    # 獲取小說名字,標題鏈接,章節(jié)名稱
    title_list, link_list, novel_name = get_chapters('https://www.qb5.tw/book_116659/')
    with ThreadPoolExecutor(5) as t:  # 創(chuàng)建5個線程
        for title,link in zip(title_list,link_list):
            t.submit(get_content, novel_name,title,link)  # 啟動線程

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

相關(guān)文章

  • PyQt彈出式對話框的常用方法及標準按鈕類型

    PyQt彈出式對話框的常用方法及標準按鈕類型

    這篇文章主要為大家詳細介紹了PyQt彈出式對話框的常用方法及標準按鈕類型,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Python繼承和子類從Person到Student演示實例

    Python繼承和子類從Person到Student演示實例

    這篇文章主要為大家介紹了Python繼承和子類從Person到Student演示實例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • python爬蟲判斷招聘信息是否存在的實例代碼

    python爬蟲判斷招聘信息是否存在的實例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲判斷招聘信息是否存在的實例代碼,有興趣的朋友們可以學(xué)習下。
    2020-11-11
  • Python利用myqr庫創(chuàng)建自己的二維碼

    Python利用myqr庫創(chuàng)建自己的二維碼

    這篇文章主要給大家介紹了關(guān)于Python利用myqr庫創(chuàng)建自己的二維碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-11-11
  • python程序中斷然后接著中斷代碼繼續(xù)運行問題

    python程序中斷然后接著中斷代碼繼續(xù)運行問題

    這篇文章主要介紹了python程序中斷然后接著中斷代碼繼續(xù)運行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python matplotlib繪制實時數(shù)據(jù)動畫

    Python matplotlib繪制實時數(shù)據(jù)動畫

    Matplotlib作為Python的2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形。本文將利用Matplotlib庫繪制實時數(shù)據(jù)動畫,感興趣的可以了解一下
    2022-03-03
  • pyside寫ui界面入門示例

    pyside寫ui界面入門示例

    PySide 是一個python綁定的跨平臺GUI Qt庫。目前,支持Python的Qt庫有兩個PyQt和PySide。下面寫一個簡單的hello程序?qū)W習他的使用方法
    2014-01-01
  • 詳解Django框架中用context來解析模板的方法

    詳解Django框架中用context來解析模板的方法

    這篇文章主要介紹了詳解Django框架中用context來解析模板的方法,Django是重多高人氣Python框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • python怎么使用xlwt操作excel你知道嗎

    python怎么使用xlwt操作excel你知道嗎

    這篇文章主要為大家介紹了python使用xlwt操作excel的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python在不同條件下的輸入與輸出

    python在不同條件下的輸入與輸出

    在本篇文章里小編給大家整理的是關(guān)于python在不同條件下的輸入與輸出,有需要的朋友們可以學(xué)習下。
    2020-02-02

最新評論

出国| 商南县| 黎平县| 鹰潭市| 岳西县| 饶阳县| 宁乡县| 新疆| 新干县| 吴堡县| 新余市| 天柱县| 阿克陶县| 会同县| 丰台区| 三明市| 密云县| 恩平市| 双桥区| 方城县| 邵东县| 竹山县| 股票| 隆昌县| 和静县| 阿尔山市| 佛山市| 南京市| 阳曲县| 廉江市| 沁源县| 大兴区| 成武县| 陈巴尔虎旗| 巫溪县| 岳阳市| 达州市| 辽中县| 富平县| 仲巴县| 西林县|