简单小爬虫(一)

为了完成期末作业打算去爬一下漫画台这个网站

http://www.manhuatai.com/zhiyinmanke.html

一个挺不错的网站

目标是爬取漫画台主要模块版块的漫画名称

然后输入漫画名称来查看漫画章节

首先使用的是python3 

from bs4 import BeautifulSoup as bs 
from urllib import request

来介绍一下beautifulsoup 库包

eautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

来介绍一下urllib 库包

使用urllib库包中的request模拟浏览器发送请求

开始吧

导入库包

from bs4 import BeautifulSoup as bs 
from urllib import request

from bs4 import BeautifulSoup as bs  #将导入的模块命名为bs方便后面使用

模拟浏览器发送请求

def get_url(url):
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
	request1 = request.Request(url, headers=headers) 
	respond=request.urlopen(request1)
	html=respond.read().decode('utf-8')
	return html

设置头部信息让模拟更加真实

扫描二维码关注公众号,回复: 4835925 查看本文章

查看浏览器hearer信息

谷歌浏览器右键 ->检查->

request.Request(url,header=)

第一个参数是网站地址  第二参数传入一个字典

返回一个request对象

respond=request.urlopen(request1)

使用返回request对象的urlopen()方法发送请求

得到返回的网页代码可以使用

print(request.urlopen())打印网页代码

查看网页的编码方式


html=respond.read().decode('utf-8')
	return html

此网页是使用utf-8的编码

使用decode('utf-8')

解码 变成unicode编码

并返回网页代码

第二步 将网页代码使用beautifulsoup 解析网页代码

将网页代码通过标签的层级关系解析成树形结构方便搜索

def parser_html(html):
	#print(html)
	soup=bs(html,'html.parser')#创建beautisoup对象,
	ul_list=soup.find_all('a',class_='sdiv')
	page_dic={'':''}#保存链接与漫画名称
	for i in ul_list:
		print(i['href'],i['title'])
		page_dic[str(i['href'])]=i['title']
	for k,v in page_dic.items():
			print(k,v)
	return page_dic
首先创建beautifulsoup对象

有两个参数第一个参数是网页代码,第二个是解析模式

返回对象

通过使用对象的fina_all()方法,会返回一个resultset集合元素为tag对象

查看网页代码发现:


数据是这样隐藏在这里的  a标签   class名称为sdiv中

于是便使用find_all(a,class="sdiv"    寻找标签

保存在page_dic 这个字典中链接作为键,名称作为值

使用循环输出数据


第三步通过输入的名称组合成新的url地址

def href_comb(page_dic):
	href='http://www.manhuatai.com'
	name=input('请输入漫画名')
	for k,v in page_dic.items():
		if(name==v):
			print(name)
			href1=k
	return href+href1

有没有发现什么规律?

我们就只需将我们的字典中的‘键’组合进去再发送请求就可以获得网页代码了

第四步 再次向服务器发送请求

href=href_comb(page_dic)
		print(href)
		topic_html=get_url(href)

第五步  再次进行解析

def search_top(html):
	s=bs(html,'html.parser')
	topic1=s.find_all('ul',id='topic1')
	#print(len(topic1))
	topic1_a=topic1[0].find_all('a')
	for i_a in topic1_a:
		print(i_a.string)

先找到ul id 名称的标签,然后再寻找a标签

并打印


任务完成

附上全部代码

from bs4 import BeautifulSoup as bs 
from urllib import request
import urllib
from selenium import webdriver
import time
from selenium.webdriver.support.ui import Select
def get_url(url):
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
	request1 = request.Request(url, headers=headers) 
	respond=request.urlopen(request1)
	html=respond.read().decode('utf-8')
	return html



def parser_html(html):
	#print(html)
	soup=bs(html,'html.parser')#创建beautisoup对象,
	ul_list=soup.find_all('a',class_='sdiv')
	print(type(ul_list))
	page_dic={'':''}#保存链接与漫画名称
	for i in ul_list:
		print(i['href'],i['title'])
		page_dic[str(i['href'])]=i['title']
	for k,v in page_dic.items():
			print(k,v)
	return page_dic

'''
取出网站,进行拼接

'''
def href_comb(page_dic):
	href='http://www.manhuatai.com'
	while 1:
		try:
			name=input('请输入漫画名')
			for k,v in page_dic.items():
				if(name==v):
					print(name)
					href1=k
					return href+href1
		except Exception as e:
			print("输入不规范,请重新输入")
				


		
'''
寻找章节
'''
def search_top(html):
	s=bs(html,'html.parser')
	topic1=s.find_all('ul',id='topic1')
	print(len(topic1))
	topic1_a=topic1[0].find_all('a')
	for i_a in topic1_a:
		print(i_a.string,i_a['href'])
	while 1:
		try:
			srting_top=input("请输入需要查看的章节")
			for i_a in topic1_a:
				if srting_top==i_a.string:
					return 'http://www.manhuatai.com'+i_a['href']
		except Exception as e:
			print("输入错误,请再次输入需要查看的章节")
		
	
	'''
寻找图片链接
'''


if __name__ == '__main__':
	while 1:
		html=get_url('http://www.manhuatai.com/zhiyinmanke.html')
		page_dic=parser_html(html)
		href=href_comb(page_dic)
		print(href)
		topic_html=get_url(href)
		topic_href=search_top(topic_html)
		print(topic_href)
		get_pict_src(topic_href)
		#save_picture(get_pict_src(topic_href))
		targer=input("是否退出,退出请输入1,继续查看请输入2")
		if targer==1:
			break
	#


猜你喜欢

转载自blog.csdn.net/zpc17875305019/article/details/80765353