zoukankan      html  css  js  c++  java
  • 爬取糗事百科

    先看运行结果:

     代码详细解析:

    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)   

      

  • 相关阅读:
    spring aop实现数据库的读写分离
    MySQL主从复制(Master-Slave)实践
    java 注解 Annontation
    java NIO介绍
    为什么你学不会递归?告别递归,谈谈我的一些经验(转)
    maven的安装、路径配置、修改库文件路径和eclipse中的配置、创建maven工程(转)
    Eclipse中创建Maven多模块工程
    Eclipse的Working Set管理项目
    Java使用POI读取和写入Excel指南(转)
    Webpack安装和命令
  • 原文地址:https://www.cnblogs.com/yizhixiang/p/11913643.html
Copyright © 2011-2022 走看看