Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件

网友投稿 266 2022-08-26


Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件

1 #-*-coding:utf-8-*- 2 import urllib2 3 from bs4 import BeautifulSoup 4 5 class dbxs: 6 7 def __init__(self): 8 self.pageIndex = 0 9 self.enable = True10 self.file = None11 self.content = []12 13 14 #获取html页面的内容15 def getPage(self, pageIndex):16 try:17 #设置代理ip18 enable_proxy = True19 proxy_handler = urllib2.ProxyHandler({'Http': '113.118.170.230:808'})20 null_proxy_handler = urllib2.ProxyHandler({})21 if enable_proxy:22 opener = urllib2.build_opener(proxy_handler)23 else:24 opener = urllib2.build_opener(null_proxy_handler)25 urllib2.install_opener(opener)26 #获得页面响应的内容27 url = '+ "?start=" + str(pageIndex)28 #设置请求头部信息,模拟浏览器的行为29 my_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0)'}30 request = urllib2.Request(url, headers = my_headers)31 response = urllib2.urlopen(request)32 return response.read()33 except urllib2.URLError, e:34 if hasattr(e, "code"):35 print e.code36 if hasattr(e, "reason"):37 print e.reason38 return None39 40 #过滤查找这一页的小说名字,信息和评分41 def getContent(self, pageIndex, content):42 pageCode = self.getPage(pageIndex)43 soup = BeautifulSoup(pageCode, 'html.parser')44 #在获得相应的内容中找出所有标签为

的内容(里面包含了我们需要的小说信息)45 contents = soup.find_all('dd')46 47 if contents:48 for item in contents:49 title = item.find(class_ = 'title').string.encode('utf-8')50 info = item.find(class_ = 'desc').string.strip().encode('utf-8')51 rate = item.find(class_ = 'rating_nums')52 #通过试验,我们发现某一页可能存在小说没有评分,如果我们不判断rate,那么可能就出现报错53 if rate:54 rates = rate.string.encode('utf-8')55 content.append([title, info, rates])56 57 else:58 content.append([title, info])59 #如果页面不包含
标签,我们应该停止60 else:61 print u"所有页面已加载完"62 self.enable = False63 64 return content65 66 67 68 #写入文件69 def writeData(self, content):70 self.file = open("bdxs.txt", "w+") #必须在for循环外面,不然每一次写入都会覆盖之前的数据71 for item in content:72 if len(item) == 3:73 self.file.write(item[0] + "\n")74 self.file.write(item[1] + "\n")75 self.file.write(u"评分:" + item[2] + "\n\n")76 else:77 self.file.write(item[0] + "\n")78 self.file.write(item[1] + "\n")79 self.file.write("========================================\n\n")80 81 82 #创建一个开始方法83 def start(self):84 x = 185 while self.enable == True:86 content = self.getContent(self.pageIndex, self.content)87 if self.enable == True:88 print "正在写入第%s页..." %x89 self.writeData(content)90 self.pageIndex += 1591 x += 192 93 94 DBXS = dbxs()95 DBXS.start()

这段代码我还没理解透彻,比如每一页的小说信息写入完成后,怎么在后面加上第几页,后期我将继续完善它。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:同一性和切片副本
下一篇:springboot集成junit编写单元测试实战
相关文章

 发表评论

暂时没有评论,来抢沙发吧~