• 爬取糗事百科


    先看运行结果:

     代码详细解析:

    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)   

      

  • 相关阅读:
    SQL Server 中关于EXCEPT和INTERSECT的用法
    SQL SERVER 索引中聚集索引分析和Transact-SQL语句优化
    DATEDIFF() 返回2个日期之间的间隔
    CharIndex()
    poj1470 Closest Common Ancestors [ 离线LCA tarjan ]
    2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
    hdu 2438 Turn the corner [ 三分 ]
    poj 3295 Tautology [ 栈 ]
    hdu 4923 Room and Moor [ 找规律 + 单调栈 ]
    1597: [Usaco2008 Mar]土地购买 [ dp+斜率优化 ] 未完
  • 原文地址:https://www.cnblogs.com/yizhixiang/p/11913643.html
Copyright © 2020-2023  润新知