Python爬取小说案例

爬取网站:https://www.biquge.cm

话不多说,上代码
# coding=gbk

from bs4 import BeautifulSoup
import requests
import random
import os

global lots_headers
lots_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0",
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'
]
global headers
headers = {'User-Agent':random.choice(lots_headers)}

global baseurl
baseurl = 'https://www.biquge.cm'

global url
url = 'https://www.biquge.cm/8/8804'

global savePath
savePath = 'G:\\牧神记'


def createFile(path):
    if os.path.exists(path) is False:
        os.mkdir(path)
    os.chdir(path)


def downfile():
    res = requests.get(url, headers=headers)
    # 这里转换编码是为了保证title即小说标题写入不乱码
    html_doc = res.content.decode('gbk')
    # 转换编码方法二如下
    # html_doc = str(res.content, 'gbk')
    soup = BeautifulSoup(html_doc, 'html.parser')
    url_sub = soup.find('div', id='list').find_all('a')
    for a in url_sub:
        try:
            # zjurl为章节url
            zjurl = baseurl + a.attrs['href']
            bookName = a.text+'.txt'
            # 这里转换编码是为了保证content即小说内容不乱码
            res_sub = requests.get(zjurl, headers=headers)
            html_sub_doc = res_sub.content.decode('gbk')

            # 转换编码方法二如下
            # html_sub_doc = str(res_sub.content, 'gbk')
            soup_sub = BeautifulSoup(html_sub_doc, 'html.parser')
            text = soup_sub.find('div', id='content').text

            # 方法一:将四个\xa0替换为一个\n
            content = text.replace('\xa0\xa0\xa0\xa0', '\n')
            # 方法二:去掉所有\xa0
            # content = "".join(text.split())
            f = open(bookName, 'w+')
            f.write(content)
            print('下载完成,章节名:' + str(bookName))
            f.close()

        except Exception as e:
            print(e)


def main():
    createFile(savePath)
    print("开始下载牧神记...")
    downfile()


if __name__ == '__main__':
    main()

注释已经挺详细的了,方便以后查看。
遇到的问题1:乱码

如果遇到文件名乱码,或者是文件内容乱码,一定要查看编码方式。

文件乱码解决方法:

文件头加上编码方式说明:# coding=gbk

网页内容解析乱码解决方法:

对网页内容解析的时候,要对其content采用decode方法,即解码为gbk。(关于解码/编码方式我在下一篇文章单独说明一下)举例: html_doc = res.content.decode('gbk')或者采用str()将content编码方式转为gbk。举例:html_doc = str(res.content, 'gbk')

遇到的问题2:\xa0需替换,否则内容为空,并出现如下提示

提示:'gbk' codec can't encode character '\xa0' in position 0: illegal multibyte sequence
``

解决方法:替换或去掉\xa0

方法1:content = text.replace('\xa0\xa0\xa0\xa0', '\n')
方法2:content = "".join(text.split())

您好!要使用Python进行航空案例爬虫工作,您可以遵循以下步骤: 1. 导入所需的库:通常我们会使用requests库发送HTTP请求,并使用BeautifulSoup库解析HTML页面。确保您已经安装了这两个库。 2. 发送HTTP请求:使用requests库发送GET或POST请求来获取要爬取的网页内容。您可以使用URL库构建完整的URL。 3. 解析页面内容:使用BeautifulSoup库解析HTML页面,以便从中提取所需的数据。您可以使用标签、类、ID等选择器来定位特定的元素。 4. 提取数据:根据页面结构和内容,使用BeautifulSoup库提取所需的数据。您可以将数据存储在变量中,或将其保存到文件或数据库中。 5. 循环爬取:如果要爬取多个网页,您可以使用循环来遍历每个网页,并重复执行步骤2到4。 这里是一个简单的示例代码,用于爬取航空案例中的航班信息: ```python import requests from bs4 import BeautifulSoup def crawl_flights(): url = "https://example.com/flights" # 替换为实际的网页URL # 发送HTTP请求 response = requests.get(url) # 解析页面内容 soup = BeautifulSoup(response.text, "html.parser") # 提取数据 flights = [] flight_elements = soup.find_all("div", class_="flight") for flight_element in flight_elements: flight_info = {} flight_info["flight_number"] = flight_element.find("span", class_="number").text flight_info["departure"] = flight_element.find("span", class_="departure").text flight_info["arrival"] = flight_element.find("span", class_="arrival").text flights.append(flight_info) return flights # 测试爬虫 flights = crawl_flights() for flight in flights: print(flight) ``` 请注意,这只是一个示例,您需要根据实际的航空案例网页结构和数据提取需求进行相应的修改。另外,爬取网页时请尊重网站的使用政策,并确保遵守相关法律法规。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值