本次的分享内容是利用scrapy去爬取百度贴吧小说吧的楼主发的帖子的内容,地址连接如下,小说吧链接:《谁杀死了知更鸟》。
第一步,首先我们要创建一个Scrapy的项目。
首先在pycharm中新建一个文件夹。名字取为贴吧小说,在我电脑上的路径为:C:\Users\Administrator\Desktop\Python资料\贴吧小说
打开控制台界面输入cmd。输入cd+空格+C:\Users\Administrator\Desktop\Python资料\贴吧小说。
然后去创建项目。
创建结果如下:
第二步,创建爬虫的文件
打开“xiaoshuo.py”,书写代码,代码如下。
# -*- coding: utf-8 -*-
import scrapy
import re
class XiaoshuoSpider(scrapy.Spider):
#该name值为爬虫名,这个值是唯一的
name = 'xiaoshuo'
#爬虫的爬取域
allowed_domains = ['tieba.baidu.com']
#起始的url列表,第一批请求的地址
start_urls = ['https://tieba.baidu.com/p/5815118868?pn=1']
#创建一个名字为tieba的txt文档。
f = open('tieba.txt','a' ,encoding='utf-8')
def parse(self, response):
# 找到指定类名的div标签,标签内贴吧内容和作者的集合体
div_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]')
# print(div_list)
# 找到作者
for div in div_list:
# 获取含有louzhubiaoshi_wrap类名的标签,该类名只有作者含有
author = div.xpath('.//div[@class="louzhubiaoshi_wrap"]').extract()
#判断列表的长度
if len(author) != 0:
#获取楼主发帖子的内容
content = div.xpath('.//div[@class="d_post_content j_d_post_content "]').xpath('string(.)').extract()[0] + ',\n'
remove = re.compile('\s')
douhao = re.compile(',')
content = ''
self.f.write(content)
self.f.write('\n')
在终端内输入命令:scrapy crawl xiaoshuo,会出现以下结果。
点击进入这个文档,结果为:
这样便算是成功的爬取内容了。
这个需要给大家说一些比较重要的内容,获取标签内的全部文本的几种方式。获取楼主发帖内容的这部分。
1.获取的样式为:通过获取最外面的标签,然后遍历,获取到里面的文本内容
content_list= div.xpath('.//div[@class="d_post_contentj_d_post_content"]/text()').extract()
print(content_list)
for content in content_list:
print(content)
运行结果为:
2.用正则去掉所有的多余标签。
content_list= div.xpath('.//div[@class="d_post_content j_d_post_content "]').extract()
print(content_list)
for content in content_list:
content = content.strip()
pattern = re.compile(r'<.*?>', re.S)
content = pattern.sub('', content)
print(content)
3.用//text()获取标签内文本内容。/text()获取的是标签的文本,//text()获取的是标签以及字标签的文本。
content_list=div.xpath('.//div[@class="d_post_contentj_d_post_content"]//text()').extract()
print(content_list)
for content in content_list:
print(content)
运行结果为:
4.使用xpath('string(.)')这种方式来获取所有的文本并且连接。
content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]')
content_list=content_list.xpath('string(.)').extract()
print(content_list)
for content in content_list:
print(content)
运行结果为:
以上为获取标签内内容的四种方式。
爬取网站数据的简单例子就这样的完成了。