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)   

      

  • 相关阅读:
    探索c#之Async、Await剖析
    探索C#之布隆过滤器(Bloom filter)
    探索C#之虚拟桶分片
    刷新本地的DNS缓存数据
    php取整函数ceil,floor,round,intval函数的区别
    这样顶级人生规划 ,想不成功都难
    全篇干货,10分钟带你读透《参与感》
    iOS审核秘籍】提审资源检查大法
    php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
    RDS MySQL 连接数满情况的处理
  • 原文地址:https://www.cnblogs.com/yizhixiang/p/11913643.html
Copyright © 2011-2022 走看看