爬取糗事百科

先看运行结果:

 代码详细解析:

import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='ISO-8859-1')

  这三行代码即将控制台输出的编码格式设置为ISO-8859-1,对于不同网页,可在源码查看编码方式,也可输出respond.encoding查看

下面是四个函数的详解

保存函数

def html_save(url,s):
	lst=[url,s]
	with open('save.csv','a',encoding='ISO-8859-1')as f:
		ss=str(','.join(lst)+'
')#用逗号分隔内容
		print(ss)
		f.write(ss)#写入文件
		print('save success!!!')

  这个函数的作用是保存传入的字符串s到save.csv文件中,用追加的方式打开,并且编码与控制台输出编码一致,否则乱码

解析函数

def parse_html(url,docx):
	soup=BeautifulSoup(docx.text,'html.parser')
	c_txt=soup.find('div',{'class':'content'}).find_all('p')
	s=''
	for i in c_txt:
		s=s+i.string
	print(s)
	html_save(url,s)

  这是解析respond的函数,传入参数为url,和respond对象,根据需爬取的内容找到对应标签,在此不做解释,自行百度,最后,爬取的内容s传给保存函数进行保存

获取详情页函数

def request_detail(url):
	print(url)
	docx=requests.get(url)
	parse_html(url,docx)

  获取详情页,通过参数url,对该url进行请求,请求得到的respond对象再传给解析函数

获取url列表函数

docx=requests.get(url)
	soup=BeautifulSoup(docx.text,'html.parser')
	urllist=soup.find('div',{'class':'Volume'}).find_all('dd')
	#print(urllist)
	nn=0
	for i in urllist:
		if nn>=n:
			break
		url='http://www.qiushibaike.net/'+i.find('a').get('href')
		request_detail(url)
		nn+=1

  此函数作用是获取主页里所有符合条件的url,并将获取的url传给获取详情页函数

全部代码如下:

import requests
from bs4 import BeautifulSoup
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='ISO-8859-1')

def html_save(url,s):
	lst=[url,s]
with open('save.csv','a',encoding='ISO-8859-1')as f: ss=str(','.join(lst)+' ') print(ss) f.write(ss) print('save success!!!') def parse_html(url,docx): soup=BeautifulSoup(docx.text,'html.parser') c_txt=soup.find('div',{'class':'content'}).find_all('p') s='' for i in c_txt: s=s+i.string print(s) html_save(url,s) def request_detail(url): print(url) docx=requests.get(url) parse_html(url,docx) def request_list(url,n): docx=requests.get(url) soup=BeautifulSoup(docx.text,'html.parser') urllist=soup.find('div',{'class':'Volume'}).find_all('dd') #print(urllist) nn=0 for i in urllist: if nn>=n: break url='http://www.qiushibaike.net/'+i.find('a').get('href') request_detail(url) nn+=1 request_list('http://www.qiushibaike.net/index(2005).html',3)   

  

原文地址:https://www.cnblogs.com/yizhixiang/p/11913643.html