爬取糗事百科
先看运行结果:
代码详细解析:
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)+'\n')#用逗号分隔内容 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)+'\n') 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)