爬虫——爬取晋江免费文章

本文记录了作者学习爬虫的过程,通过观察晋江文学城的网页URL规律,使用正则表达式解析HTML获取文章内容,并将其保存到文件中。在实际操作中,遇到了文章内容中换行过多的问题,以及因文章ID缺乏规律性而需要手动收集排行榜文章ID的挑战。

主要目的是为了记录学习爬虫过程。

<code># -*- coding: UTF-8 -*-
import requests
import re
import json
from multiprocessing import Pool
from requests.exceptions import RequestException
import itertools
headers = {'Accept':'*/*',
'Accept-Encoding':   'gzip, deflate',
'Accept-Language':    'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection':   'keep-alive',
'Cookie':    'cna=um0tE7tQllkCAXE21MrqNDM2',
'DNT':    1,
'Host':    'afp.csbew.com',
'User-Agent':    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0'}

def get_one_page(url):
    
    response = requests.get(url,params = headers)
    response.encoding = "gb2312"
    html = response.text
    # html = html.encode(encoding="gbk", errors="ignore").decode("gbk", errors="ignore")
    html = html.encode(encoding="utf-8", errors="ignore").decode("utf-8", errors="ignore")
    return html

def parse_one_page(html):
    pattern = re.compile('.*?class="noveltext">.*?<h2>(.*?)</h2>.*?both;"></div>(.*?)<div id="favoriteshow_3"',re.S)
    items = re.findall(pattern,html)
    for item in items:
        yield{
            'chapter':item[0],
            'contents':item[1]
            }

def write_to_file(text):
    with open('novel.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(text,ensure_ascii=False)+'\n')
        
    
    
def main(novelid , num ):
    url='http://www.jjwxc.net/onebook.php?novelid='+str(novelid)+'&chapterid='+str(num)
    print(url)
    html=get_one_page(url)
    for item in parse_one_page(html):
        write_to_file(item)
    print('ok')
    
def main_vice(novelid):
    for x in range(16):
        print(x,novelid)
        main(novelid,x+1)      


if __name__ == '__main__':
    pool = Pool(3)
    with open('rank.txt','r',encoding='utf-8') as file:
        novelid = []
        for i in file.readlines():
            file = json.loads(i)
            for key,value in file.items():
                novelid.append(value)

    pool.map(main_vice,novelid)</code>


<p>思路就是简单的观察晋江文章网站的网页地址,可得规律,然后用正则表达式解析html,获得文章内容,写入文件中。

代码有一个问题,就是得到的文章中有很多换行,可以用.replace替换,运行较慢。同时,由于文章id是不太具有规律性的,因为我下载的是月榜内容,所以,得写一个文件来收集排行榜上的文章id。</p>

        

    
    

Python爬虫基础案例通常从简单的网页抓取开始,比如爬取猫眼电影的数据。这里以`requests`库获取网页内容,然后用`BeautifulSoup`解析HTML,提取所需信息,并通过`pandas`将数据保存到Excel件为例: 首先,你需要安装必要的库: ```bash pip install requests beautifulsoup4 pandas openpyxl ``` 下面是一个基本的Python爬虫脚本示例,假设我们要爬取电影名称、评分和主演信息: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 爬取URL url = "https://maoyan.com/board/4" response = requests.get(url) # 解析HTML soup = BeautifulSoup(response.text, 'lxml') # 查找需要的数据元素,这里假设电影列表在class为'movie-list' movies_data = soup.find_all(class_='movie-list') # 创建空列表存储数据 data_list = [] # 遍历每部电影 for movie in movies_data: title = movie.find('a', class_='title').text rating = movie.find('i', class_='rating_num')['title'] stars = ', '.join(movie.find_all('span', class_='name')) # 将数据添加到列表 data_list.append([title, rating, stars]) # 将数据转换为DataFrame df_movies = pd.DataFrame(data_list, columns=['电影名称', '评分', '主演']) # 保存到Excel件 filename = '猫眼电影数据.xlsx' df_movies.to_excel(filename, index=False) ``` 这个例子中,爬虫会定期访问指定的猫眼电影页面,提取每个电影的基本信息,然后将其保存到一个名为`猫眼电影数据.xlsx`的Excel件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值