学着写一个Python爬取某小说网站的小说,获取书籍名称,分类,介绍,下载地址。

使用PyCharm写的,在写之前,安装了一些库,下面几个:

  • numpy
  • pandas
  • openpyxl

PyCharm中的安装方法:

  1. 打开 PyCharm,点击 “File” 菜单中的 “Settings” 选项
  2. 在左侧菜单中找到 “Project: <你的项目名称>”,点击它
  3. 在弹出窗口中点击 “Project Interpreter” 选项
  4. 点击右下角的 “+” 按钮来安装新的包
  5. 在搜索框中输入 “openpyxl”,找到它并点击安装

然后就可以开始码代码了:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import openpyxl

url = 'https://zxcs.info/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

book_data = []
for link in soup.find_all('a'):
    if '下载小说' in link.text:
        book_data.append({'书籍名称': link.text, '下载地址': link['href'], '更新时间': link.find_next_sibling().text})

df = pd.DataFrame(book_data)
df.to_excel('book_data.xlsx', engine='openpyxl')

然后发现不行,整完后发现没有爬到东西,修改

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://zxcs.info/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

book_data = []
for link in soup.find_all('a',string='免费下载'):
    #获取下载链接
    download_url = link.get('href')
    #获取小说名称
    title = soup.find('title').text
    #获取分类
    category = link.find_next_sibling().text
    #获取更新时间
    update_time = link.find_next_sibling().find_next_sibling().text
    #获取作品信息
    book_info = link.find_next_sibling().find_next_sibling().find_next_sibling().text
    book_data.append({'小说名称': title, '分类': category, '更新时间': update_time,'作品信息':book_info,'下载地址': download_url})

df = pd.DataFrame(book_data)
df.to_excel('book_data.xlsx')

然后,还是没有数据,接着改

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0;Win64) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}

# 爬取目录页
catalog_url = 'https://www.zxcs.info/sort/3'
catalog_response = requests.get(catalog_url, headers=headers)
catalog_soup = BeautifulSoup(catalog_response.text, 'html.parser')

# 正则表达式提取信息
book_data = []
for link in catalog_soup.find_all('a', href=re.compile('^/post/\d+$')):
    book_url = 'https://www.zxcs.info' + link['href']
    book_response = requests.get(book_url, headers=headers)
    book_soup = BeautifulSoup(book_response.text, 'html.parser')
    book_name = book_soup.find('title').text.split('_')[0]
    book_category = book_soup.find('a', href=re.compile('^/sort/\d+$')).text
    book_time = book_soup.find('time').text
    book_info = book_soup.find('div', class_='entry-content').text
    book_download = book_soup.find('a', text='免费下载')['href']
    book_data.append({'小说名称': book_name, '分类': book_category, '时间': book_time, '作品信息': book_info, '下载地址': book_download})

df = pd.DataFrame(book_data)
df.to_excel('book_data.xlsx')

执行完,还是生成一个空表格,懵逼中……

按照思路,

爬虫可以通过在请求中添加headers来实现,例如设置User-Agent。可以通过time.sleep()来限制爬虫爬行的速度。使用beautifulsoup来解析网页,并使用正则表达式来提取需要的信息;最后,可以使用pandas库将信息保存到电子表格中。

后面在研究研究,先整到这里,睡觉,明天还要搬砖