今天从山西卫健委官网上爬取新型冠状病毒疫情有关内容的数据。到发博客为止我只做了一半,只是将相关文字爬取下来,还没有经过处理。那么主要说一说我碰到的问题吧。主要就是爬取网页的文字内容时受到网页标签的影响,难以规范地取得我想要的内容,影响包括但不限于各种稀奇古怪的位置上出现的换行符、空格、制表符。同时爬取下来的网页还是一大块,因为我并不能一下子得到我想要的数据,所以这一大块网页我还要分成几个小部分单独去处理直到得到有关数据。话不多说,代码如下:
1 # -*- coding: utf-8 -*- 2 import scrapy 3 from scrapy import Request 4 import re 5 import os 6 7 8 class SxgzbdSpider(scrapy.Spider): 9 name = 'sxgzbd' 10 allowed_domains = ['wjw.shanxi.gov.cn'] 11 start_urls = ['http://wjw.shanxi.gov.cn/yqfbl05/index.hrh'] 12 13 def parse(self, response): 14 context = "" 15 str1 = "" 16 if response.url == 'http://wjw.shanxi.gov.cn/yqfbl05/index.hrh': 17 sxurls = response.xpath( 18 "//div[@class='demo-right']//li/a[contains(@title,'新型冠状病毒')]/@href").extract() 19 for i in sxurls: 20 yield Request(i) 21 else: 22 data = response.xpath( 23 "//div[@class='artxx']/text()").re("2020-dd-dd") 24 contexts = response.xpath( 25 "//div[@class='ze-art']//text()").extract() 26 for i in contexts: 27 context += i 28 # 将所有的换行符换成一个空格 29 context = re.sub(' +', ' ', context) 30 # 将所有的空格换成一个空格 31 context = re.sub(' +', ' ', context) 32 # 将所有的制表符换成一个空格 33 context = re.sub(' +', ' ', context) 34 # 将所有的空格换成一个换行符 35 context = re.sub(' +', ' ', context) 36 # 如果alldata文件存在,删除 37 if os.path.exists("alldata.txt"): 38 os.remove("alldata.txt") 39 # 追加写入 40 with open("alldata.txt", 'a') as p: 41 p.write(context) 42 # 读出文件内容为字符串 43 f = open("alldata.txt", "r") 44 for line2 in f: 45 str1 = line2 46 # 根据换行符分割 47 finalstr = str1.split(" ") 48 for i in finalstr: 49 if len(i) > 70: 50 if os.path.exists(str(i[:9])+".txt"): 51 os.remove(str(i[:9])+".txt") 52 with open(str(i[:9]) + ".txt", 'a') as p: 53 p.write(i)