日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬取小说代码bs4和_使用python爬虫,requests(夹带BeautifulSoup的使用)爬取网络小说...

發布時間:2024/10/6 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取小说代码bs4和_使用python爬虫,requests(夹带BeautifulSoup的使用)爬取网络小说... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于本人也是初學者,算是小白一枚,這里跟大家分享一下爬取網站上的小說的過程。

第一步我們需要導入我們需要的模塊,比如requests,BeautifulSoup,還有正則模塊re。

代碼如下:import re

import requests

from bs4 import BeautifulSoup

然后我們需要找到我們需要爬取的網站,這里我隨便選取了一個小說網站:

http://www.tianxiabachang.cn

接下來就是我們需要爬出小說的html,隨便在這個網站找到了一本小說,就比如說《某某悍刀行》吧。url = 'http://www.tianxiabachang.cn/7_7568/'

response = requests.get(url)

response.encoding = 'utf-8'

html = response.text

這樣,這就是我們獲取到了這個小說網頁的源碼html。

但是很多時候網站都會有一定的反爬蟲機制,訪問幾次之后我們所在的IP就會被封鎖,所以我們就需要做一個簡單的反反爬蟲操作,那就是給你的get請求加上header,這個header可以在目標網頁上找到。

某網站某地址的源

比如這個就是之前我們網頁的源碼,(可以摁鍵盤上的F12或者右擊鼠標點擊檢查,找到之后可以刷新一次)我們需要的是Request Headers下面的User-Agent,我們復制過來,然后就成了下面的情況。

header = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

直到目前為止我們爬取了《某某悍刀行》的目錄所在頁的html了。

下一步就是找到我們爬取到的html,來進行正則處理,找到我們需要的從第一章到最后一章的所有內容soup = BeautifulSoup(html,'html.parser')

one = soup.find("div",attrs={"id":"list"})

這樣我們就得到了部分我們需要的內容:

根據這個圖片,我們可以從當中寫出正則表達式:pattern1 = re.compile('

',re.S)

pattern2 = re.compile('html">(.*?)

',re.S)

get_url = re.findall(pattern1, str(one))

get_title = re.findall(pattern2, str(soup))

其中的pattern1 就是對文中的目錄下面的網址進行的正則表達式,選取到的是7_7568(這個代表在這個網頁下面的《雪中悍刀行》這本書的代碼)下面的3226什么開頭的數字。

而pattern2 就是網址后面的章節標題的正則表達式。

下圖就是我們正則到的內容:

很明顯的可以看到,前面的這些章節都是番外內容,跟我們一般看小說看的前后順序明顯不同,所以我們可以把這些不需要的刪掉,直接從第一章 “小二上酒”我們爬取:for i in range(41):

del get_url[0]

del get_title[0]

接下來我們創建一個當前文件夾下的一個txt文件來保存我們爬取的東西:

with open('雪中悍刀行.txt', 'a', newline='', encoding='UTF-8-sig') as txtfile:

for i in range(len(get_url)):

reallurl = url + str(get_url[i])

# print(reallurl)

response1 = requests.get(reallurl, headers=re_header)

response1.encoding = 'utf-8'

html1 = response1.text

其中的**‘a’**是代表我們不覆蓋錄入,不加newline=’'的話,有可能會每個一行留一行的空白,encoding是對數據進行編碼。

然后我們做了一個for循環,通過這個循環我們能重復操作,反復訪問,每一章的網址下面的html,所以html1就成了每一章的html。

這個就是我們得到的一章的內容,我們對這個進行BeautifulSoup處理,因為我們只需要下面的這個東西,所以,我們這么操作:soup1 = BeautifulSoup(html1, "html.parser")

one = soup1.find("div",attrs={"id":"content"})

得到的one就是我們需要的每一章小說:

然后把我們得到的數據,保存到txt文件中就行:txtfile.write(str(get_title[i]) + "\n")

txtfile.write(str(one) + "\n")

以下就是全部代碼,歡迎大家斧正!(我也保留了寫代碼時候的各種操作,大家是不是有相同的情況呢2333)

(第一次寫,有什么不好的,大家留點情555)

from urllib.request import urlretrieve

import requests

import os

import re

from bs4 import BeautifulSoup

# url = 'http://www.xbiquge.la/13/13959/'

re_header = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

# url = 'http://www.tianxiabachang.cn/7_7568/3226399.html'

url = 'http://www.tianxiabachang.cn/7_7568/'

response = requests.get(url,headers = re_header)

response.encoding = 'utf-8'

html = response.text

soup = BeautifulSoup(html,'html.parser')

one = soup.find("div",attrs={"id":"list"})

# print(one)

pattern1 = re.compile('

',re.S)

pattern2 = re.compile('html">(.*?)

',re.S)

get_url = re.findall(pattern1, str(one))

get_title = re.findall(pattern2, str(soup))

# print(get_url)

# print(get_title)

#

for i in range(41):

del get_url[0]

del get_title[0]

# print(len(get_url), len(get_title))

#

with open('雪中悍刀行.txt', 'a', newline='', encoding='UTF-8-sig') as txtfile:

for i in range(len(get_url)):

reallurl = url + str(get_url[i])

# print(reallurl)

response1 = requests.get(reallurl, headers=re_header)

response1.encoding = 'utf-8'

html1 = response1.text

# print(html1)

soup1 = BeautifulSoup(html1, "html.parser")

one = soup1.find("div",attrs={"id":"content"})

# print(one)

# pattern3 = re.compile('
(.*?)
')

# endtxt = re.findall(pattern3, html1)

# print(html1)

# print(endtxt)

txtfile.write(str(get_title[i]) + "\n")

txtfile.write(str(one) + "\n")

print('下載第',i+1 ,'章完成')

這就是python文件正在運行中,爬取一章一章的內容。

祝大家學業有成升職加薪,謝謝,謝謝

總結

以上是生活随笔為你收集整理的python爬取小说代码bs4和_使用python爬虫,requests(夹带BeautifulSoup的使用)爬取网络小说...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。