我试图用regex解析scrapy结果,问题是我的regex模式位于MySQL表中。。我很难按顺序循环模式,以便返回没有任何html标记的干净内容。。 简单地说,html结果scrapy->;parse with pattern in row1(例如:clean html above content),parse with pattern in row2(clean html below content)。。。。。->;清洁
示例
<body>
<title>
<some tags>
<content>
<footer tags>
<another tags>
</body>
我正试图用这个表、字段名(pattern、sequence、replacer)、值来清除html:
row1 <body.*?some tags> 1 None
row2 <footer.*?/body> 2 None
row3 <br> 3 Enter
row4 #" 4 ""
因此,我得到了一个干净的内容作为回报,我使用regex替换模式,而不是xpath匹配,因为我希望用自己的html标签来废弃很多web
这是我的代码,它没有引发错误,但结果是重复的。。它应该是一个干净的结果从一个刮擦的结果。我想我做错了什么,但因为我是python和scrapy的新手,所以想不通
def parse(self, response):
for mbuh in response.xpath('//body'):
Item = ParsingerbotItem()
Item['ling'] = str(response.url)
ngaliase = re.findall("\w+.com", str(response.url))[0]
mmhtml = mbuh.xpath('//body').extract()
cur.execute("select aliase, pattern, seq, opsi, replacer from tb_bersihin where aliase='"+ngaliase+"\' order by seq asc")
for filde in cur.fetchall():
faliase = filde[0]
fpattern = filde[1]
fseq = filde[2]
fopsi = filde[3]
freplacer = filde[4]
print "faliase=%s,fpattern=%s,furutan=%d,fopsi=%s,freplacer=%s" % \
(faliase, fpattern, fseq, fopsi, freplacer )
if ( freplacer == "NO" ) : freplacer=""
if ( fopsi == "NL" ) : fopsi="re.DOTALL"
k1 = re.sub(fpattern , freplacer, str(mmhtml), re.DOTALL)
print k1
先谢谢你
循环
for mbuh in response.xpath('//body')
只执行一次,因为xpath只返回一个选择器。然后使用mmhtml = mbuh.xpath(etc)
,它将始终返回相同的数据,无论mbuh中的内容是什么,因为xpath以“//”开头,这意味着“从页面开始搜索”。它还会将整个页面提取为文本。你知道吗我明白你为什么这么说了当前fetchall,但为什么要循环使用mbuh=响应.xpath()? 您希望xpath返回什么?你知道吗
@instete,看看this漂亮的小蜘蛛。它读取thisCSV文件,并对页面进行通用解析。以此为起点,将CSV文件读取更改为数据库读取。很可能您没有1000个url,因此只需要从数据库中读取一次,并将XPath表达式存储在内存中。有帮助吗?你知道吗
我想我解决了我自己的问题,也许我不擅长描述我上面的问题,但我只想把第一个模式的结果作为第二个模式的主题,然后从mysql表继续到下一个模式。。你知道吗
我所做的只是改变了
进入
在循环
cur.fetchall()
之前声明k1 = str(mmhtml)
谢谢
相关问题 更多 >
编程相关推荐