利用requests+BeautifulSoup爬取网页关键信息
一、requests库基础知识
Requests的方法
requests库的response对象
二、爬取网站所需信息
1.访问网站,如图1-1所示:
图1-1
2.点击子页面,审查网页元素,部分内容如图1-2所示:
图1-2
3.实现代码如下:
#coding:utf-8importrequestsfrombs4importBeautifulSoupimportxlsxwriter#定义网页内容获取函数GET_HTML_CONTENTdefGET_HTML_CONTENT(url):#定义user_agent,模拟浏览器访问网页user_agent='Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)\Chrome/63.0.3239.132Safari/537.36'headers={'User-Agent':user_agent}r=requests.get(url,headers=headers)#获取网页内容html_str=r.textreturnhtml_str#定义子网页URL获取函数GET_CHILD_URLdefGET_CHILD_URL(content):data=BeautifulSoup(content,"html.parser")genre_session=data.find_all('li',attrs={'class':"mediumlistboxgroup"})#定义一个空列表childurl存放类别名称及子网页URLchildurl=[]forsessioningenre_session:elements=session.find_all('h4',attrs={'class':"heading"})forelementinelements:genre={}genre['name']=element.find('a').textgenre['nextpage']=element.find('a')['href']childurl.append(genre)returnchildurl#定义子网页内容处理函数GET_CHILD_INFOdefGET_CHILD_INFO(content,kind):data=BeautifulSoup(content,"html.parser")book_session=data.find_all('ol',attrs={'class':"alphabetfandomindexgroup"})items=book_session[0].find_all('ul',attrs={'class':"tagsindexgroup"})#定义一个空列表books存放书的类别、名称及评论数books=[]foriteminitems:book={}book['kinds']=kindbook['name']=item.find('a').textbook['reviews']=item.text.strip().split('\n')[-1].strip().strip('()')books.append(book)returnbooksif__name__=='__main__':url='https://archiveofourown.org/media'content=GET_HTML_CONTENT(url)childurl=GET_CHILD_URL(content)row=1col=0data=[[u'类别',u'名称',u'评论数']]workbook=xlsxwriter.Workbook("data.xlsx")worksheet=workbook.add_worksheet()worksheet.write_row(0,0,data[0])forkinchildurl:kind=k['name']nexturl=k['nextpage']geturl='https://archiveofourown.org'+nexturltxt=GET_HTML_CONTENT(geturl)books=GET_CHILD_INFO(txt,kind)forinfoinbooks:worksheet.write(row,col,info['kinds'])worksheet.write(row,col+1,info['name'])worksheet.write(row,col+2,info['reviews'])row+=1workbook.close()
4.运行结果如图1-3所示:
图1-3
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。