Python爬虫的简单代码
来源:互联网 发布:android 开启网络权限 编辑:程序博客网 时间:2024/04/29 05:47
用Python爬虫的例子,网上有很多,这是自己调试的简单代码,只是记录一下,方便以后写代码的时候重复利用
爬取网络小说
目的:由于喜欢看些网络小说,但是在网站看往往有广告或是其他东西,同时百度书名,选择网站,下载等等对我来说也是觉得相对麻烦而又浪费时间,因此想建立一个爬取网络小说的程序,用户与网站不直接接触,只是把想法告诉程序,程序自动收集网上的小说,并整理成txt文本,下载到本地手机,方便阅读。
由于只是刚开始学习,只能调试下简单代码,实现单页文章的抓取,离目标要求还远远不够,这个主要用来练手
代码简单介绍
from urllib.request import urlopen from bs4 import BeautifulSoup import urllib.request#定义文章读取、写入函数,传入文章地址,将其写入预定文件中def read_article_XiaoShuo(article_name,article_url):#因为很多网站不能直接爬取,需要将软件伪装成浏览器,这个headers以及req就是用来伪装成浏览器的。 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/51.0.2704.63 Safari/537.36'} req = urllib.request.Request(url=article_url, headers=headers) html = urllib.request.urlopen(req).read()#.decode('utf8')#, 'ignore' bsObj = BeautifulSoup(html, "lxml") title_list=bsObj.findAll('div',attrs={'class':'bookname'}) for title in title_list: print(title.h1.get_text())#通过对网站分析,我发现它的小说内容在<div id="content">的标签下,通过bs将其提取出来 a_list=bsObj.findAll('div',attrs={'id':'content'})#因为从网页上抓取的小说,在编码及格式上有些不满足要求,所以用正则方式进行修改 for a in a_list: s=a.get_text() s1=re.sub(u'(\xa0)+', '\n',s)#去掉网页编码中,不能编码的部分;#因为作者在文章开头可能会有一堆废话,不想看,所以用下面代码过滤掉。因为我找的网站上,作者的话与正文前用'---'分割,所以将'---'之前的内容全部去掉 s2=re.sub('.*--','',s1,flags=re.DOTALL)#flags=re.DOTALL表示'.'可以代表换行'\n' print(s2) write_file(article_name, s1)
定义一个写文件函数,每次读取的内容写入指定文章之中。
参数1:小说名称(文件保存名,没有指定路径的时候,默认在程序安装路径下)
参数2:文章内容
def write_file(file_name, s_article):#如果文件没有,将新建一个,参数'a',表示追加写入 with open(file_name, 'a',encoding='utf8') as f: f.write(s_article)
完整代码,实现了从燃文小说网,输入小说地址,将小说下载下来的目的。
#!/usr/bin/env python3# -*- coding: utf-8 -*-from urllib.request import urlopen from bs4 import BeautifulSoup import urllib.requestimport redef write_file(file_name, s_article): with open(file_name, 'a',encoding='utf8') as f: f.write(s_article) def read_article_XiaoShuo_chapter(article_title,article_url):#从章节里读取内容,写入小说文件里 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/51.0.2704.63 Safari/537.36'} req = urllib.request.Request(url=article_url, headers=headers) html = urllib.request.urlopen(req).read()#.decode('utf8')#, 'ignore' bsObj = BeautifulSoup(html, "lxml") chapter_title=bsObj.find('div',attrs={'class':'bookname'}).h1.get_text() print(chapter_title) write_file(article_title, '\n'+chapter_title+'\n') a_list=bsObj.findAll('div',attrs={'id':'content'}) for a in a_list: s=a.get_text() s1=re.sub(u'(\xa0)+', '\n',s) s2=re.sub('(.*--?)|(--.*--?)|(--.*)','',s1,flags=re.DOTALL) s2=re.sub('[a-zA-Z]+?','',s2,flags=re.DOTALL) write_file(article_title, s2+'\n')def read_article_title(article_url): headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/51.0.2704.63 Safari/537.36'} req = urllib.request.Request(url=article_url, headers=headers) html = urllib.request.urlopen(req).read().decode('gbk')#, 'ignore' bsObj = BeautifulSoup(html, "lxml") article_title=bsObj.div.h1.get_text()+'.txt' #获得小说名字 for ch in bsObj.find('div',attrs={'id':'list'}).findAll('a',attrs={'href':True}):#获取小说链接 chapter_name=ch.get_text()#章节名称 chapter_href=ch.get('href')#章节链接# print(ch.get_text(),' ',chapter_href) read_article_XiaoShuo_chapter(article_title,chapter_href)read_article_title('http://www.ranwen.net/files/article/79/79871/')
问题:
1、正则只适合燃文网站,如何只能判断出网页链接,自动在网上寻找,还得研究;
2、燃文网上小说里,嵌入了很多网站标志,还没有找到有效的正则表达方式,比如:
≧燃≮文≥小≌说..a. ≧
燃≧∈≤文≦小说.w.. ≡
≧≧≦燃文小∈说.rn. ≧
燃文∈≯小∈?说..n. ?
燃▼文◆小说网ww、w
.r-a-n-w、e
n-.-org
■燃▲文 ▼● w-w、w、.r-a、n
w-e、n、.org
▼◆■ ▼★燃文
w-ww、.
r、a-n-wen.org
▼
燃▲文 ● w`w-w-.ranwen.org
★
●燃文小说网w-w-w.ranwen.org
写好的代码,在cmd环境下可以执行下列代码运行
python ***.py
0 0
- python简单的爬虫代码
- Python爬虫的简单代码
- Python简单的爬虫
- 简单的python爬虫
- 简单的Python 爬虫
- python写的简单有效的爬虫代码
- python简单爬虫代码,python入门
- python 爬虫试手,好简单的爬虫
- python实现简单爬虫功能代码
- python简单速成,一行代码写爬虫
- JAVA简单的爬虫代码
- 简单的java爬虫代码
- PYTHON 爬虫简单的认识
- [python]简单的网络爬虫
- Python实现简单的爬虫
- 简单的Python爬虫程序
- python 爬虫的简单示例
- Python爬虫简单的demo
- EditPlus常用操作
- 租用游艇
- call()、apply()与bind()
- SpringMVC入门教程
- struts.xml配置文件(package,namespace,action)
- Python爬虫的简单代码
- Java枚举类型enum
- 转载:Unix/Linux 网络 IO 模型简介
- pyc6
- The Necklace UVA - 10054 题解(欧拉回路,路径输出)
- 理解Window和WindowManager
- TCP与UDP的区别、ARP协议的作用、路由器与交换机的区别
- 解决跨域的代码
- 关于电脑未联网状态下,navicat for mysql 连接数据库不成功的解决办法