Webpage Text Transformation Interface,將網頁文章內容以結構化方式儲存,以方便後續分析應用。
Project description
🌐 WTTI
Webpage Text Transformation Interface(WTTI),將網頁文章內容以結構化方式儲存,以方便後續分析應用。
🚀 安裝
使用 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
自動產生的屬性
以下屬性會在建立物件時自動產生,不可手動修改
uuid
:文章的唯一識別碼created_timestamp
:文章物件建立的時間戳記modified_timestamp
:文章物件最後一次修改的時間戳記
預設屬性
以下屬性在建立物件時可以指定,如無對應值也可以不指定,不指定時會自動產生預設值
text
(str):文章內容url
(str):文章網址author
(str):文章作者platform
(str):文章來源平台likes
(int):文章按讚數title
(str):文章標題published_time
:文章發布時間,可以是以下三種格式-
- timestamp
-
- "%Y-%m-%d %H:%M:%S"
-
- 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的模式,有score
、order
、random
三種模式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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
WTTI-0.3.0.tar.gz
(11.6 kB
view hashes)