几年前的代码,记在这里,以免后面找不到。
- 导入第三方库、定义header
import requests
from bs4 import BeautifulSoup
import re
import traceback
import time
import random
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'}
- 读取网页
def getHTMLText(url,headers,page):
try:
r = requests.get(url, headers=headers,timeout=100)
print(r.status_code) #请求一个url链接
r.raise_for_status() #如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding #替代r.encoding,使得返回内容的解码是正确的
print(page)
return r.text
except:
traceback.print_exc()
print('Error Pages:{:d}'.format(page))
return ""
- 解析网页
def parsePage(url,page):
demo = getHTMLText(url,headers,page)
soup=BeautifulSoup(demo,'html.parser')
titlelist=soup.find_all('h2') #获取标题
titleStr=titlelist[0].get_text()
m=re.search(r'《.*》',titleStr)
title = m.group(0)
textlist=soup.find_all('table',border="0") #获取文本
textStr=textlist[2].get_text() #为有四个元素的列表,第三个元素为文本内容,其他元素无用
tempL=textStr.split('\n')
text = ''
for j in range(1,len(tempL)):
if j%2 == 0:
tempL[j]+='\n'
text += tempL[j]
return title, text
- 写入文本文档
def write_text(page,title,text):
file_name = str(page) + '.txt'
#title, text = parsePage(url,page)
with open(file_name,'w', encoding = 'utf-8-sig') as w:
w.write(title + '\n')
w.write(text)
w.close()
- 自动爬取网页
L = [570054, 570062, 570080]
for i in L:
url = 'https://ctext.org/text.pl?node=' + str(i) + '&if=en'
page = i
title, text = parsePage(url,page)
write_text(page,title,text)
time.sleep(40) #设置每次爬虫的时间间隔
time.sleep(random.random()*15)
刚刚运行了一下,代码还是能用的。