Scrapy正则匹配h2、bold标签中数字开头完整内容问题求助
问题原因
你当前使用的正则r'\d+\.\s*\w+'中,\w+仅能匹配连续的字母、数字、下划线字符,一旦遇到空格、英文撇号、特殊符号就会停止匹配,因此只能抓取到标题的第一个单词。
正确正则表达式
你可以使用以下正则匹配完整的数字开头标题内容:r'^\d+\.\s*.+'
规则说明:
^锚定匹配字符串开头,确保只匹配以「数字+点」格式开头的内容\d+匹配1位及以上的数字\.匹配小数点\s*匹配小数点后0到多个空白字符.+匹配剩余所有字符直到当前文本段结束,包含空格、特殊符号等内容
如果你需要避免匹配到末尾的多余标点,可以调整为:r'^\d+\.\s*[^,,。?!\n]+'
修改后的完整代码
import scrapy import re class TestSpider(scrapy.Spider): name = 'test' allowed_domains = ['www.tasteatlas.com','www.lih.travel','www.crazymasalafood.com','www.holidify.com','www.jaipurcityblog.com','www.trip101.com','www.adequatetravel.com'] start_urls = ['https://www.adequatetravel.com/blog/famous-foods-in-jaipur-you-must-try/', 'https://www.holidify.com/pages/street-food-in-jaipur-1483.html' ] def parse(self, response): # 匹配h2标签内容 h2_res = response.css('h2::text').re(r'^\d+\.\s*.+') if h2_res: print(h2_res) # 匹配b标签内容 b_res = response.css('b::text').re(r'^\d+\.\s*.+') if b_res: print(b_res)
内容的提问来源于stack exchange,提问作者Iswar Chand
相关产品推荐
相关产品推荐

