WTTI

Webpage Text Transformation Interface,將網頁文章內容以結構化方式儲存,以方便後續分析應用。


License
MIT
Install
pip install WTTI==0.3.0

Documentation

🌐 WTTI

Webpage Text Transformation Interface(WTTI),將網頁文章內容以結構化方式儲存,以方便後續分析應用。

Python Build and Test pypi version GitHub repo size GitHub PyPI - Python Version GitHub issues Open in Colab

🚀 安裝

使用 pip 安裝

# 更新pip
pip install --upgrade pip
pip install WTTI

📦 功能

  • 提供網頁文章留言結構化儲存的介面
  • 支援儲存的內容輸出成不同的格式
    • DataFrame
    • Database
  • 提供Proxy功能,避免被網站封鎖

✍️ 如何使用

from wtti import Post
from wtti.output import posts_to_dataframe

# 建立一個Post物件
post = Post(
    text="如題,我不小心吞下了我的 AirPods,怎麼辦?",
    url="https://www.google.com",
    author="notChatGPT",
    platform="匹踢踢",
    likes=10,
    published_time="2021-01-01 12:00:00",
    title="不小心吞下了我的 AirPods 怎麼辦?",
    category="發問板",
)

# 添加底下的留言
post.add_comment(
    comment_text="你可以去醫院看看",
    author="醫生",
    likes=33,
    published_time="2021-01-01 12:05:00",
)
post.add_comment(
    comment_text="我也不知道",
    # 如果沒有作者或是按讚數,可以不填
    published_time="2021-01-01 12:05:20",
)
post.add_comment(
    comment_text="或者你可以試試用磁鐵把它吸出來!",
    author="DIY達人",
    likes=134,
    published_time="2021-01-01 12:20:00",
)
post.add_comment(
    comment_text="AirPods 是由蘋果公司開發的,如果您使用的是 iPhone 或 iPad,您可以試著與 Siri 聯繫,看看她是否有什麼神奇的解決方法。",
    author="我愛蘋果",
    likes=9487,
    published_time="2021-01-01 12:30:45",
)


# 建立一個Post物件
post2 = Post(
    text="只是發文測試",
    url="https://www.google.com",
    author="developer",
    platform="匹踢踢",
    likes=0,
    published_time="2021-01-01 13:00:00",
    title="測試測試",
    category="測試板",
)


# 輸出成DataFrame
posts_list = [post, post2] # 將所有的Post物件放入list
posts_df, comments_df = posts_to_dataframe(posts_list, merge=False)

# 再將DataFrame輸出成csv檔
posts_df.to_csv("posts.csv", index=False)
comments_df.to_csv("comments.csv", index=False)

📚 類別說明

  • Post:用來儲存文章的類別
  • Comment:用來儲存留言的類別

Post

自動產生的屬性

以下屬性會在建立物件時自動產生,不可手動修改

  • uuid:文章的唯一識別碼
  • created_timestamp:文章物件建立的時間戳記
  • modified_timestamp:文章物件最後一次修改的時間戳記

預設屬性

以下屬性在建立物件時可以指定,如無對應值也可以不指定,不指定時會自動產生預設值

  • text(str):文章內容
  • url(str):文章網址
  • author(str):文章作者
  • platform(str):文章來源平台
  • likes(int):文章按讚數
  • title(str):文章標題
  • published_time:文章發布時間,可以是以下三種格式
      1. timestamp
      1. "%Y-%m-%d %H:%M:%S"
      1. datetime.datetime
  • category(str):文章分類

額外屬性

  • 可以透過Post["new_attribute"] = "new_value"的方式新增屬性

Comment

添加留言方法

預設留言物件會跟著文章物件一起建立

post.add_comment(
    comment_text="你好",
    author="路人",
    likes=1,
    published_time="2021-01-01 12:05:00",
)

預設屬性

以下屬性在建立物件時可以指定,如無對應值也可以不指定,不指定時會自動產生預設值

  • comment_text(str):留言內容
  • author(str):留言作者
  • likes(int):留言按讚數

自動產生的屬性

以下屬性會在建立物件時自動產生,不可手動修改

  • uuid:留言的唯一識別碼
  • created_timestamp:留言物件建立的時間戳記
  • modified_timestamp:留言物件最後一次修改的時間戳記

Proxy

提供Proxy介面,自動從https://www.sslproxies.org/取得Proxy進行request

基礎使用

建立Proxy物件後,使用request方法即可進行request,使用方式與requests相同

from wtti import Proxy
proxy = Proxy()
response = proxy.request("https://www.google.com")

進階使用

from wtti import Proxy
proxy = Proxy(
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
    }, # 手動指定headers
    cookies={
        "cookie1": "value1",
        "cookie2": "value2",
    }, # 手動指定cookies
    proxy_mode="score", # 指定proxy的模式,有"score"、"order"、"random"三種模式
)
response = proxy.request(
    "https://www.google.com",
    max_retries_per_proxy=3, # 指定每個proxy最多重試幾次
    max_proxies_to_try=3, # 指定最多使用幾個proxy
    ignore_failure=True, # 如果所有proxy都失敗,是否忽略失敗丟出的Raise
    use_local=False, # 如果所有proxy都失敗,是否使用本機IP進行request
)
  • proxy_mode:指定proxy的模式,有scoreorderrandom三種模式
    • score:根據proxy的分數來決定使用哪個proxy,分數越高的proxy越優先使用
      • request成功:分數+3
      • request失敗:分數-1
    • order:依照proxy的順序來決定使用哪個proxy,越早加入的proxy越優先使用
    • random:隨機選擇proxy

🤝 貢獻

如果你發現了一個 bug,或者有任何改進的建議,歡迎提交 issue 或者 pull request。

📜 授權

本套件使用 MIT 授權。詳細的授權條款請參閱 LICENSE 檔案。
This package is licensed under the MIT License.