無料の小説を見たいですか?小説を這ってみませんか?それなら私と一緒にこれをしてください

序文

私は今学期にPythonを使い始めました。シンプルさと使いやすさがPythonの最大の利点だと思います。コード形式の要件はそれほど厳密ではありません。コードの記述の使用は優れています。Pythonでは、クローラーに最も興味があります。詳細データ、およびより良いデータ分析は、より多くの価値を得ることができます

斬新なアイデアを這う

最初に小説を観察し、静的か動的かを区別して、小説の章をクリックします。F12の[要素]オプションを使用して、記事のコンテンツがdiv id = 'content'タグに保存されていることを確認できます。 、ウェブサイトが静的であることを示します動的なSeleniumクロールを使用する場合も可能ですが、ウェブサイトは静的であるため、動的なクロールを使用する必要はありません。

次に、対象の小説を選択した後、小説のカタログページをクリックし、F12の[要素]オプションを使用すると、小説のすべての章のURLが規則的であることがわかります。

すべてのチャプターのURLにクロールして1を保存し、URLを完成させてから、各チャプターを入力してタイトルと本文のコンテンツをクロールし、それをtxtに保存します。

汎用モジュールの実現

アイデアを明確にした後、手順に従って機能を段階的に完了します。

1.リクエストリクエストライブラリとデータクリーニングマッチング再ライブラリを使用します

import requests import re
reモジュールは、独自のPython文字列照合モジュールです。このモジュールの多くの関数は正規表現に基づいて実装され、正規表現を使用して文字列のあいまい照合を実行し、必要な文字列部分を抽出します。すべての言語。注意:

(1)reモジュールはpythonに固有です。

(2)正規表現はすべてのプログラミング言語で使用できます。

(3)reモジュールと正規表現は文字列を操作します。

私には学習とコミュニケーションの輪があります。人の数はそれほど多くありませんが、Pythonを学ぶ人は誰でも学び、コミュニケーションするようになります。どのような問題
発生しますか?お互いに話し合い、学術的な問題を交換します。ペンギングループとのコミュニケーションを学ぶ:745895701

2.ターゲットWebサイトにURLリクエストを送信します

s = requests.Session()url = 'https://www.xsbiquge.com/96_96293/'html = s.get(url)html.encoding = 'utf-8'

3.Webサイトのディレクトリページですべての章のURLを見つけます

#获取章节
caption_title_1 = re.findall(r'<a href="(/96_96293/.*?\.html)">.*?</a>',html.text) 

4.もう一度尋ねるのに便利なように、すべてのチャプターURLの取得を完了します

for i in caption_title_1:   caption_title_1 = '新笔趣阁_书友最值得收藏的网络小说阅读网!'+i 

5.取得した各URLにアクセスして、タイトルと本文のコンテンツを見つけます

s1 = requests.Session()r1 = s1.get(caption_title_1)r1.encoding = 'utf-8' # 获取章节名
#meta是head头文件中的内容,用这个获取章节名
name = re.findall(r'<meta name="keywords" content="(.*?)" />',r1.text)[0]print(name)
#这里print出章节名,方便程序运行后检查文本保存有无遗漏
chapters = re.findall(r'<div id="content">(.*?)</div>',r1.text,re.S)[0] 

6.得られたボディコンテンツをきれいにします

chapters = chapters.replace(' ', '')  
chapters = chapters.replace('readx();', '')  
chapters = chapters.replace('& lt;!--go - - & gt;', '')  
chapters = chapters.replace('&lt;!--go--&gt;', '')  
chapters = chapters.replace('()', '')  # 转换字符串  
s = str(chapters)  #将内容中的<br>替换  
s_replace = s.replace('<br/>',"\n")  while True:      
index_begin = s_replace.find("<")      
index_end = s_replace.find(">",index_begin+1)      
if index_begin == -1:          
break     
s_replace = s_replace.replace(s_replace[index_begin:index_end+1],"")  
pattern = re.compile(r'&nbsp;',re.I)#使匹配对大小写不敏感  
fiction = pattern.sub(' ',s_replace)

7.データをプリセットtxtに保存します

path = r'F:\title.txt'     # 这是我存放的位置,你可以进行更改#a是追加
file_name = open(path,'a',encoding='utf-8')
file_name.write(name)
file_name.write('\n')
file_name.write(fiction)
file_name.write('\n')#保存完之后关闭
file_name.close() 

運転結果


プログラムのソースコード

import requestsimport res = requests.Session()url = 'https://www.xsbiquge.com/96_96293/'
html = s.get(url)html.encoding = 'utf-8'# 获取章节
caption_title_1 = re.findall(r'<a href="(/96_96293/.*?\.html)">.*?</a>',html.text)
# 写文件+path = r'F:\title.txt'     
# 这是我存放的位置,你可以进行更改
#a是追加
file_name = open(path,'a',encoding='utf-8')
# 循环下载每一张
for i in caption_title_1:   caption_title_1 = '新笔趣阁_书友最值得收藏的网络小说阅读网!'+i   
# 网页源代码   
s1 = requests.Session()   
r1 = s1.get(caption_title_1)   
r1.encoding = 'utf-8'  
# 获取章节名   
#meta是head头文件中的内容,用这个获取章节名   name = re.findall(r'<meta name="keywords" content="(.*?)" />',r1.text)[0]   
print(name)   
file_name.write(name)   
file_name.write('\n')   
# 获取章节内容   
#re.S在字符串a中,包含换行符\n,在这种情况下:   
#如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始。而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。   
chapters = re.findall(r'<div id="content">(.*?)</div>',r1.text,re.S)[0]   
#换行   
chapters = chapters.replace(' ', '')   
chapters = chapters.replace('readx();', '')   
chapters = chapters.replace('& lt;!--go - - & gt;', '')   
chapters = chapters.replace('&lt;!--go--&gt;', '')   
chapters = chapters.replace('()', '')   # 转换字符串   
s = str(chapters)   #将内容中的<br>替换   
s_replace = s.replace('<br/>',"\n")   while True:       
index_begin = s_replace.find("<")       
index_end = s_replace.find(">",index_begin+1)       
if index_begin == -1:           
break      
 s_replace = s_replace.replace(s_replace[index_begin:index_end+1],"")  
pattern = re.compile(r'&nbsp;',re.I)#使匹配对大小写不敏感   
fiction = pattern.sub(' ',s_replace)   
file_name.write(fiction)   
file_name.write('\n')file_name.close()

総括する

このプロジェクトを通じて、システムの機能モジュール全体を設計および実装することができました。これは、特にデータマイニングとデータ分析において、私に大きな利益をもたらし、自習能力を向上させました。

プログラムコードは、小説をクロールする機能を実現し、データをクリーンアップします。しかし、これは小説をクロールするだけです。汎用モジュールに大きなループを追加すると、Webサイト上のすべての小説のURLを取得できます。これらは私の考えやアイデアです。他にアイデアがあれば、コメントして交換することができます。

おすすめ

転載: blog.csdn.net/Python_xiaobang/article/details/112919146