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信息當作文本進行解析。