运用scrapy框架爬取所需要的内容。
我在百度贴吧中找了一篇小说,我来只爬取楼主的文本信息。下面为初始代码。
import scrapy
import re
class XiaoshuoSpider(scrapy.Spider):
name = 'xiaoshuo'
allowed_domains = ['tieba.baidu.com']
start_urls = ['https://tieba.baidu.com/p/4685013359']
def parse(self, response):
以下几种操作方式需与初始代码相连接获取文本。
1.获取最外面的标签,遍历内部所有的子标签,获取标签文本。代码如下:
# 首先我们先获取包裹所有内容的标签,在此基础上进行操作
info = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]')
for x in info :
louzhu = x.xpath('.//div[@class="louzhubiaoshi_wrap"]').extract()
# print(louzhu)
if len(louzhu) != 0 :
content = x.xpath('.//div[@class="p_content "]/cc/div/text()').extract()
for z in content:
with open('xiaoshuo.txt', 'a', encoding='utf-8') as f:
f.write(z)
f.write('\n')
2.运用正则正则去掉所用的标签,代码如下:
content_list = x.xpath('.//div[@class="p_content "]/cc/div/text()').extract()
# print(content_list)
remove = re.compile(r'<.*?>', re.S)
kongge = re.compile('\s')
content = ''
f = open('xiaoshuo.txt','a',encoding='utf-8')
for x in content_list :
x = re.sub(remove,'',x)
x = re.sub(kongge,'',x)
content += x
# print(content)
f.write(content)
f.write('\n')
3.运用//text()获取标签以及字标签的文本,再进行拼接。
content_list = x.xpath('.//div[@class="p_content "]//text()').extract()
# print(content_list)
remove = re.compile('\s')
douhao = re.compile(',')
content = ''
f = open('xiaoshuo.txt','a',encoding='utf-8')
for x in content_list :
x = re.sub(remove,'',x)
x = re.sub(douhao,'',x)
content += x
f.write(content)
f.write('\n')
4.使用xpath('string(.)') 这种方式来获取所有的文本并且拼接
content_list = x.xpath('.//div[@class="p_content "]').xpath('string(.)').extract()
# print(content_list)
f = open('xiaoshuo.txt','a',encoding='utf-8')
remove = re.compile('\s')
for x in content_list :
x = re.sub(remove,'',x)
f.write(x)
f.write('\n')
这四种方法获取的文本信息均为以下表现形式
今后会有更多简单而且好用的方法,及时向大家分享。