一、这个程序的url是根据页面url的规律相加的到的
url = 'https://www.biqudao.com/bqge3584/' + str(self.num) + '.html'
但是,很多网页url都是不规则的变化,所以这种只符合页面规则变化的特殊网页
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import urllib import urllib2 from lxml import etree class Spider: def __init__(self): self.num = 3035268 self.ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"} def tiebaSpider(self): url = 'https://www.biqudao.com/bqge3584/' + str(self.num) + '.html' self.loadPage(url) # 读取页面内容 def loadPage(self, url): req = urllib2.Request(url, headers = self.ua_header) html = urllib2.urlopen(req).read() selector = etree.HTML(html) #这里返回的是一个list列表对象 content = selector.xpath('//div[@id="content"]/text()') self.writeToFile(content) # print content def writeToFile(self,content_list): # os.setdefaultencoding("utf-8") for content in content_list: file = open('./tongzhuo.txt', 'a') # content = unicode(content, 'ascii').encode('UTF-8') # file.write(content) print content self.num += 1 print "*" * 20 print self.num # 模拟 main 函数 if __name__ == "__main__": # 首先创建爬虫对象 mySpider = Spider() # 调用爬虫对象的方法,开始工作 while True: mySpider.tiebaSpider()注意点
1、这里我只是做了一个打印,写入文件时,编码转换有异常
2、这个小说的url路径是变化的,使用这种方式爬,有时获取不到数据,
3、由于页面的url不是有规律的变化,有可能程序会报错,这不是一种很好的方式爬取数据,只是作为一个简单的入门
4、很多网站的url链接不是一成不变的,导致程序需要经常变动,
5、有些网站可能会有监控,当你在短时间内请求次数过多时,直接断了你的请求,请求不了导致程序出错
这个是我入门的一个小例子,爬取数据需要多练习,熟悉xpath的语法
二、下面这个是改进版,这个是从页面中动态的获取下一页的url,拼接,这样的话,就可以准确的获取到下一页的url,
将动态获取的url,重新赋值,这样的话就可以一直获取小说内容(理论上是可以一直爬取数据)
这里的url是动态的根据页面元素获取的,无论url是否规则变化,都不影响这里的下一页url的准确性
next_url = selector.xpath('//div[@class="bookname"]//a/@href')[3]
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import urllib import urllib2 from lxml import etree class Spider: url = 'https://www.biqudao.com/bqge3584/3035268.html' def __init__(self): self.ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"} def tiebaSpider(self): url = Spider.url self.loadPage(url) # 读取页面内容 def loadPage(self, url): req = urllib2.Request(url, headers = self.ua_header) html = urllib2.urlopen(req).read() selector = etree.HTML(html) #这里返回的是一个list列表对象,这个是内容 content = selector.xpath('//div[@id="content"]/text()') # 这个是获取页面中的url。[3]是获取下一页的url next_url = selector.xpath('//div[@class="bookname"]//a/@href')[3] next_url = "https://www.biqudao.com/" + next_url print next_url Spider.url = next_url self.writeToFile(content) def writeToFile(self,content_list): for content in content_list: file = open('./tongzhuo.txt', 'a') # content = unicode(content, 'ascii').encode('UTF-8') # file.write(content) # print content print "*" * 20 # 模拟 main 函数 if __name__ == "__main__": # 首先创建爬虫对象 mySpider = Spider() # 调用爬虫对象的方法,开始工作 while True: mySpider.tiebaSpider()