python3根據網站url,爬取網站title

python3根據網站url,爬取網站title

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 27 11:24:49 2019

@author: jerry
"""
import re
import requests
from bs4 import BeautifulSoup
import csv

def pick_charset(html):
    """
    從文本中提取 meta charset 網站編碼類型
    :param html:
    :return:
    # """
    charset = None
    m = re.compile('<meta .*(http-equiv="?Content-Type"?.*)?charset="?([a-zA-Z0-9_-]+)"?', re.I).search(html)
    if m and m.lastindex == 2:
        charset = m.group(2).lower()
    return charset

if __name__ == '__main__': 
    csvFileName = "url列表.csv"
    with open(csvFileName,newline='',encoding='UTF-8-sig') as csvfile:
        rows=csv.reader(csvfile)
        for row in rows:
            url=row[0]
            res = requests.get(url)
            #調用pick_chartset()函數獲取網站編碼類型,根據原網頁編碼類型進行編碼
            res.encoding = pick_charset(url)  
            soup = BeautifulSoup(res.text, 'lxml')
            print(soup.title.text)           #提取title並打印
            #保存到csv文件
            with open('查詢結果.csv', 'a+', encoding='utf-8-sig') as f: 
                f.write(url + ',' + soup.title.text + '\n') 
    # urlTuple = ("http://www.baidu.com","http://www.jd.com","http://www.qq.com")
    # for url in urlTuple: 
    #     res = requests.get(url)
    #     res.encoding = pick_charset(url)  #調用pick_chartset()函數獲取網站編碼類型
    #     soup = BeautifulSoup(res.text, 'lxml')
    #     print(soup.title.text)           #提取title並打印
    #     #保存到csv文件,將文件存儲爲utf-8-sig編碼格式,即utf-8無BOM編碼格式
    #     with open('查詢結果.csv', 'a+', encoding='utf-8-sig') as f: 
    #         f.write(url + ',' + soup.title.text + '\n') 

python 讀取帶BOM的utf-8格式文件的問題:

1、UTF-8分爲兩種,一種是不帶BOM的,一種是帶BOM的。其中第一種不帶BOM的是標準形式,第二種帶BOM的主要是微軟的習慣。

2、微軟在UTF-8中使用BOM(Byte order mark)是因爲這樣可以將UTF-8和ASCII等編碼明確區分開。 windows對於utf-8格式的文件存儲默認是帶有BOM的格式,來標記文本文件的編碼方式的。

3、在windows上使用open打開帶BOM的utf-8編碼的文件時,python會將第一行開頭的BOM信息當作文本進行解析。

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