Python7个爬虫小案例详解(附源码)上篇
作者:艾派森
这篇文章主要介绍了Python7个爬虫小案例详解(附源码)上篇,本文章内容详细,通过案例可以更好的理解爬虫的相关知识,七个例子分为了三部分,本次为上篇,共有二道题,需要的朋友可以参考下
本次的7个python爬虫小案例涉及到了re正则、xpath、beautiful soup、selenium等知识点,非常适合刚入门python爬虫的小伙伴参考学习。
前言
关于Python7个爬虫小案例的文章分为三篇,本篇为上篇,共两题,其余两篇内容请关注!
题目一:
使用正则表达式和文件操作爬取并保存“百度贴吧”某帖子全部内容(该帖不少于5页)
本次选取的是百度贴吧中的NBA吧中的一篇帖子,帖子标题是“克莱和哈登,谁历史地位更高”。爬取的目标是帖子里面的回复内容。
源程序和关键结果截图:
import csv import requests import re import time def main(page): url = f'https://tieba.baidu.com/p/7882177660?pn={page}' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36' } resp = requests.get(url,headers=headers) html = resp.text # 评论内容 comments = re.findall('style="display:;"> (.*?)</div>',html) # 评论用户 users = re.findall('class="p_author_name j_user_card" href=".*?" rel="external nofollow" target="_blank">(.*?)</a>',html) # 评论时间 comment_times = re.findall('楼</span><span class="tail-info">(.*?)</span><div',html) for u,c,t in zip(users,comments,comment_times): # 筛选数据,过滤掉异常数据 if 'img' in c or 'div' in c or len(u)>50: continue csvwriter.writerow((u,t,c)) print(u,t,c) print(f'第{page}页爬取完毕') if __name__ == '__main__': with open('01.csv','a',encoding='utf-8')as f: csvwriter = csv.writer(f) csvwriter.writerow(('评论用户','评论时间','评论内容')) for page in range(1,8): # 爬取前7页的内容 main(page) time.sleep(2)
题目二:
实现多线程爬虫爬取某小说部分章节内容并以数据库存储(不少于10个章节)
本次选取的小说网址是全本小说网https://www.qb5.tw/,这里我们选取第一篇小说进行爬取
然后通过分析网页源代码分析每章小说的链接
找到链接的位置后,我们使用Xpath来进行链接和每一章标题的提取
在这里,因为涉及到多次使用requests发送请求,所以这里我们把它封装成一个函数,便于后面的使用
每一章的链接获取后,我们开始进入小说章节内容页面进行分析
通过网页分析,小说内容都在网页源代码中,属于静态数据
这里我们选用re正则表达式进行数据提取,并对最后的结果进行清洗
然后我们需要将数据保存到数据库中,这里我将爬取的数据存储到mysql数据库中,先封住一下数据库的操作
接着将爬取到是数据进行保存
最后一步就是使用多线程来提高爬虫效率,这里我们创建了5个线程的线程池
源代码及结果截图:
import requests from lxml import etree import re import pymysql from time import sleep from concurrent.futures import ThreadPoolExecutor def get_conn(): # 创建连接 conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="novels", charset="utf8") # 创建游标 cursor = conn.cursor() return conn, cursor def close_conn(conn, cursor): cursor.close() conn.close() def get_xpath_resp(url): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'} resp = requests.get(url, headers=headers) tree = etree.HTML(resp.text) # 用etree解析html return tree,resp def get_chapters(url): tree,_ = get_xpath_resp(url) # 获取小说名字 novel_name = tree.xpath('//*[@id="info"]/h1/text()')[0] # 获取小说数据节点 dds = tree.xpath('/html/body/div[4]/dl/dd') title_list = [] link_list = [] for d in dds[:15]: title = d.xpath('./a/text()')[0] # 章节标题 title_list.append(title) link = d.xpath('./a/@href')[0] # 章节链接 chapter_url = url +link # 构造完整链接 link_list.append(chapter_url) return title_list,link_list,novel_name def get_content(novel_name,title,url): try: cursor = None conn = None conn, cursor = get_conn() # 插入数据的sql sql = 'INSERT INTO novel(novel_name,chapter_name,content) VALUES(%s,%s,%s)' tree,resp = get_xpath_resp(url) # 获取内容 content = re.findall('<div id="content">(.*?)</div>',resp.text)[0] # 对内容进行清洗 content = content.replace('<br />','\n').replace(' ',' ').replace('全本小说网 www.qb5.tw,最快更新<a href="https://www.qb5.tw/book_116659/" rel="external nofollow" >宇宙职业选手</a>最新章节!<br><br>','') print(title,content) cursor.execute(sql,[novel_name,title,content]) # 插入数据 conn.commit() # 提交事务保存数据 except: pass finally: sleep(2) close_conn(conn, cursor) # 关闭数据库 if __name__ == '__main__': # 获取小说名字,标题链接,章节名称 title_list, link_list, novel_name = get_chapters('https://www.qb5.tw/book_116659/') with ThreadPoolExecutor(5) as t: # 创建5个线程 for title,link in zip(title_list,link_list): t.submit(get_content, novel_name,title,link) # 启动线程
到此这篇关于Python7个爬虫小案例详解(附源码)上篇的文章就介绍到这了,其他两个部分的内容(中、下篇)请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Python7个爬虫小案例详解(附源码)下篇
- Python7个爬虫小案例详解(附源码)中篇
- 利用Python爬虫爬取金融期货数据的案例分析
- Python爬虫采集Tripadvisor数据案例实现
- Python Ajax爬虫案例分享
- Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
- Python爬虫入门案例之爬取二手房源数据
- Python爬虫入门案例之回车桌面壁纸网美女图片采集
- Python爬虫之Scrapy环境搭建案例教程
- 用Python爬虫破解滑动验证码的案例解析
- python爬虫系列网络请求案例详解
- python爬虫破解字体加密案例详解
- python爬虫线程池案例详解(梨视频短视频爬取)
- python爬虫scrapy框架的梨视频案例解析
- python爬虫利器之requests库的用法(超全面的爬取网页案例)
- Python爬虫实战案例之爬取喜马拉雅音频数据详解
- Python爬虫Scrapy框架CrawlSpider原理及使用案例
- Python爬虫之对CSDN榜单进行分析